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

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

Issue 2140673002: Remove SPDY/3.1 tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('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"
(...skipping 30 matching lines...) Expand all
41 #include "testing/platform_test.h" 41 #include "testing/platform_test.h"
42 42
43 using net::test::IsError; 43 using net::test::IsError;
44 using net::test::IsOk; 44 using net::test::IsOk;
45 45
46 namespace net { 46 namespace net {
47 47
48 namespace { 48 namespace {
49 49
50 enum TestCase { 50 enum TestCase {
51 // Test using the SPDY/3.1 protocol. 51 // Test without specifying a stream dependency based on the RequestPriority.
52 kTestCaseSPDY31, 52 kTestCaseNoPriorityDependencies,
53 53
54 // Test using the HTTP/2 protocol, without specifying a stream 54 // Test specifying a stream dependency based on the RequestPriority.
55 // dependency based on the RequestPriority. 55 kTestCasePriorityDependencies
56 kTestCaseHTTP2NoPriorityDependencies,
57
58 // Test using the HTTP/2 protocol, specifying a stream
59 // dependency based on the RequestPriority.
60 kTestCaseHTTP2PriorityDependencies
61 }; 56 };
62 57
63 const char kHttpURLFromAnotherOrigin[] = "http://www.example2.org/a.dat"; 58 const char kHttpURLFromAnotherOrigin[] = "http://www.example2.org/a.dat";
64 const char kHttpsURLFromAnotherOrigin[] = "https://www.example2.org/b.dat"; 59 const char kHttpsURLFromAnotherOrigin[] = "https://www.example2.org/b.dat";
65 60
66 const char kBodyData[] = "Body data"; 61 const char kBodyData[] = "Body data";
67 const size_t kBodyDataSize = arraysize(kBodyData); 62 const size_t kBodyDataSize = arraysize(kBodyData);
68 const base::StringPiece kBodyDataStringPiece(kBodyData, kBodyDataSize); 63 const base::StringPiece kBodyDataStringPiece(kBodyData, kBodyDataSize);
69 64
70 static base::TimeDelta g_time_delta; 65 static base::TimeDelta g_time_delta;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 UnstallSessionSend(delta_window_size); 118 UnstallSessionSend(delta_window_size);
124 UnstallStreamSend(stream, delta_window_size); 119 UnstallStreamSend(stream, delta_window_size);
125 } 120 }
126 121
127 void UnstallStreamSession(SpdyStream* stream, int32_t delta_window_size) { 122 void UnstallStreamSession(SpdyStream* stream, int32_t delta_window_size) {
128 UnstallStreamSend(stream, delta_window_size); 123 UnstallStreamSend(stream, delta_window_size);
129 UnstallSessionSend(delta_window_size); 124 UnstallSessionSend(delta_window_size);
130 } 125 }
131 126
132 protected: 127 protected:
133 NextProto GetProtocol() const {
134 return GetParam() == kTestCaseSPDY31 ? kProtoSPDY31 : kProtoHTTP2;
135 }
136
137 bool GetDependenciesFromPriority() const { 128 bool GetDependenciesFromPriority() const {
138 return GetParam() == kTestCaseHTTP2PriorityDependencies; 129 return GetParam() == kTestCasePriorityDependencies;
139 } 130 }
140 131
141 SpdySessionTest() 132 SpdySessionTest()
142 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( 133 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group(
143 HttpNetworkSession::NORMAL_SOCKET_POOL)), 134 HttpNetworkSession::NORMAL_SOCKET_POOL)),
144 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( 135 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool(
145 HttpNetworkSession::NORMAL_SOCKET_POOL)), 136 HttpNetworkSession::NORMAL_SOCKET_POOL)),
146 spdy_util_(GetProtocol(), GetDependenciesFromPriority()), 137 spdy_util_(GetDependenciesFromPriority()),
147 session_deps_(GetProtocol()),
148 spdy_session_pool_(nullptr), 138 spdy_session_pool_(nullptr),
149 test_url_(kDefaultUrl), 139 test_url_(kDefaultUrl),
150 test_server_(test_url_), 140 test_server_(test_url_),
151 key_(HostPortPair::FromURL(test_url_), 141 key_(HostPortPair::FromURL(test_url_),
152 ProxyServer::Direct(), 142 ProxyServer::Direct(),
153 PRIVACY_MODE_DISABLED) { 143 PRIVACY_MODE_DISABLED) {
154 session_deps_.enable_priority_dependencies = GetDependenciesFromPriority(); 144 session_deps_.enable_priority_dependencies = GetDependenciesFromPriority();
155 } 145 }
156 146
157 virtual ~SpdySessionTest() { 147 virtual ~SpdySessionTest() {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 base::WeakPtr<SpdySession> session_; 218 base::WeakPtr<SpdySession> session_;
229 SpdySessionPool* spdy_session_pool_; 219 SpdySessionPool* spdy_session_pool_;
230 const GURL test_url_; 220 const GURL test_url_;
231 const url::SchemeHostPort test_server_; 221 const url::SchemeHostPort test_server_;
232 SpdySessionKey key_; 222 SpdySessionKey key_;
233 BoundTestNetLog log_; 223 BoundTestNetLog log_;
234 }; 224 };
235 225
236 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, 226 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend,
237 SpdySessionTest, 227 SpdySessionTest,
238 testing::Values(kTestCaseSPDY31, 228 testing::Values(kTestCaseNoPriorityDependencies,
239 kTestCaseHTTP2NoPriorityDependencies, 229 kTestCasePriorityDependencies));
240 kTestCaseHTTP2PriorityDependencies));
241 230
242 // Try to create a SPDY session that will fail during 231 // Try to create a SPDY session that will fail during
243 // initialization. Nothing should blow up. 232 // initialization. Nothing should blow up.
244 TEST_P(SpdySessionTest, InitialReadError) { 233 TEST_P(SpdySessionTest, InitialReadError) {
245 CreateNetworkSession(); 234 CreateNetworkSession();
246 235
247 session_ = TryCreateFakeSpdySessionExpectingFailure(spdy_session_pool_, key_, 236 session_ = TryCreateFakeSpdySessionExpectingFailure(spdy_session_pool_, key_,
248 ERR_CONNECTION_CLOSED); 237 ERR_CONNECTION_CLOSED);
249 EXPECT_TRUE(session_); 238 EXPECT_TRUE(session_);
250 // Flush the read. 239 // Flush the read.
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 spdy_util_.ConstructSpdyGoAway(1)); 323 spdy_util_.ConstructSpdyGoAway(1));
335 MockRead reads[] = { 324 MockRead reads[] = {
336 CreateMockRead(*goaway, 0), 325 CreateMockRead(*goaway, 0),
337 }; 326 };
338 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 327 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
339 session_deps_.socket_factory->AddSocketDataProvider(&data); 328 session_deps_.socket_factory->AddSocketDataProvider(&data);
340 329
341 CreateNetworkSession(); 330 CreateNetworkSession();
342 CreateInsecureSpdySession(); 331 CreateInsecureSpdySession();
343 332
344 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 333 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
345 334
346 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); 335 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
347 336
348 // Read and process the GOAWAY frame. 337 // Read and process the GOAWAY frame.
349 base::RunLoop().RunUntilIdle(); 338 base::RunLoop().RunUntilIdle();
350 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 339 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
351 EXPECT_FALSE(session_); 340 EXPECT_FALSE(session_);
352 } 341 }
353 342
354 // A session receiving a GOAWAY frame immediately with no active 343 // A session receiving a GOAWAY frame immediately with no active
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 MockWrite writes[] = { 384 MockWrite writes[] = {
396 CreateMockWrite(*req1, 0), 385 CreateMockWrite(*req1, 0),
397 CreateMockWrite(*req2, 1), 386 CreateMockWrite(*req2, 1),
398 }; 387 };
399 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 388 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
400 session_deps_.socket_factory->AddSocketDataProvider(&data); 389 session_deps_.socket_factory->AddSocketDataProvider(&data);
401 390
402 CreateNetworkSession(); 391 CreateNetworkSession();
403 CreateInsecureSpdySession(); 392 CreateInsecureSpdySession();
404 393
405 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 394 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
406 395
407 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 396 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
408 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 397 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
409 test::StreamDelegateDoNothing delegate1(spdy_stream1); 398 test::StreamDelegateDoNothing delegate1(spdy_stream1);
410 spdy_stream1->SetDelegate(&delegate1); 399 spdy_stream1->SetDelegate(&delegate1);
411 400
412 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( 401 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
413 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 402 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
414 test::StreamDelegateDoNothing delegate2(spdy_stream2); 403 test::StreamDelegateDoNothing delegate2(spdy_stream2);
415 spdy_stream2->SetDelegate(&delegate2); 404 spdy_stream2->SetDelegate(&delegate2);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 457 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
469 MockWrite writes[] = { 458 MockWrite writes[] = {
470 CreateMockWrite(*req1, 0), 459 CreateMockWrite(*req1, 0),
471 }; 460 };
472 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 461 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
473 session_deps_.socket_factory->AddSocketDataProvider(&data); 462 session_deps_.socket_factory->AddSocketDataProvider(&data);
474 463
475 CreateNetworkSession(); 464 CreateNetworkSession();
476 CreateInsecureSpdySession(); 465 CreateInsecureSpdySession();
477 466
478 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 467 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
479 468
480 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 469 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
481 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 470 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
482 test::StreamDelegateDoNothing delegate1(spdy_stream1); 471 test::StreamDelegateDoNothing delegate1(spdy_stream1);
483 spdy_stream1->SetDelegate(&delegate1); 472 spdy_stream1->SetDelegate(&delegate1);
484 std::unique_ptr<SpdyHeaderBlock> headers1( 473 std::unique_ptr<SpdyHeaderBlock> headers1(
485 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 474 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
486 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); 475 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND);
487 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); 476 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders());
488 477
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 MockWrite writes[] = { 524 MockWrite writes[] = {
536 CreateMockWrite(*req1, 0), 525 CreateMockWrite(*req1, 0),
537 CreateMockWrite(*req2, 1), 526 CreateMockWrite(*req2, 1),
538 }; 527 };
539 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 528 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
540 session_deps_.socket_factory->AddSocketDataProvider(&data); 529 session_deps_.socket_factory->AddSocketDataProvider(&data);
541 530
542 CreateNetworkSession(); 531 CreateNetworkSession();
543 CreateInsecureSpdySession(); 532 CreateInsecureSpdySession();
544 533
545 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 534 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
546 535
547 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 536 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
548 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 537 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
549 test::StreamDelegateDoNothing delegate1(spdy_stream1); 538 test::StreamDelegateDoNothing delegate1(spdy_stream1);
550 spdy_stream1->SetDelegate(&delegate1); 539 spdy_stream1->SetDelegate(&delegate1);
551 540
552 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( 541 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
553 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 542 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
554 test::StreamDelegateDoNothing delegate2(spdy_stream2); 543 test::StreamDelegateDoNothing delegate2(spdy_stream2);
555 spdy_stream2->SetDelegate(&delegate2); 544 spdy_stream2->SetDelegate(&delegate2);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 MockWrite writes[] = { 599 MockWrite writes[] = {
611 CreateMockWrite(*req1, 0), 600 CreateMockWrite(*req1, 0),
612 CreateMockWrite(*req2, 1), 601 CreateMockWrite(*req2, 1),
613 }; 602 };
614 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 603 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
615 session_deps_.socket_factory->AddSocketDataProvider(&data); 604 session_deps_.socket_factory->AddSocketDataProvider(&data);
616 605
617 CreateNetworkSession(); 606 CreateNetworkSession();
618 CreateInsecureSpdySession(); 607 CreateInsecureSpdySession();
619 608
620 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 609 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
621 610
622 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 611 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
623 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 612 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
624 test::StreamDelegateDoNothing delegate1(spdy_stream1); 613 test::StreamDelegateDoNothing delegate1(spdy_stream1);
625 spdy_stream1->SetDelegate(&delegate1); 614 spdy_stream1->SetDelegate(&delegate1);
626 615
627 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( 616 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
628 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 617 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
629 test::StreamDelegateDoNothing delegate2(spdy_stream2); 618 test::StreamDelegateDoNothing delegate2(spdy_stream2);
630 spdy_stream2->SetDelegate(&delegate2); 619 spdy_stream2->SetDelegate(&delegate2);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 735 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
747 MockWrite writes[] = { 736 MockWrite writes[] = {
748 CreateMockWrite(*req, 0), 737 CreateMockWrite(*req, 0),
749 }; 738 };
750 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 739 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
751 session_deps_.socket_factory->AddSocketDataProvider(&data); 740 session_deps_.socket_factory->AddSocketDataProvider(&data);
752 741
753 CreateNetworkSession(); 742 CreateNetworkSession();
754 CreateInsecureSpdySession(); 743 CreateInsecureSpdySession();
755 744
756 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 745 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
757 746
758 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 747 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
759 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 748 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
760 test::StreamDelegateDoNothing delegate(spdy_stream); 749 test::StreamDelegateDoNothing delegate(spdy_stream);
761 spdy_stream->SetDelegate(&delegate); 750 spdy_stream->SetDelegate(&delegate);
762 751
763 std::unique_ptr<SpdyHeaderBlock> headers( 752 std::unique_ptr<SpdyHeaderBlock> headers(
764 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 753 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
765 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 754 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
766 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); 755 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 799 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
811 std::unique_ptr<SpdySerializedFrame> rst( 800 std::unique_ptr<SpdySerializedFrame> rst(
812 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 801 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
813 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; 802 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)};
814 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 803 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
815 session_deps_.socket_factory->AddSocketDataProvider(&data); 804 session_deps_.socket_factory->AddSocketDataProvider(&data);
816 805
817 CreateNetworkSession(); 806 CreateNetworkSession();
818 CreateInsecureSpdySession(); 807 CreateInsecureSpdySession();
819 808
820 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 809 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
821 810
822 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 811 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
823 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 812 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
824 test::StreamDelegateDoNothing delegate(spdy_stream); 813 test::StreamDelegateDoNothing delegate(spdy_stream);
825 spdy_stream->SetDelegate(&delegate); 814 spdy_stream->SetDelegate(&delegate);
826 815
827 std::unique_ptr<SpdyHeaderBlock> headers( 816 std::unique_ptr<SpdyHeaderBlock> headers(
828 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 817 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
829 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 818 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
830 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); 819 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
(...skipping 30 matching lines...) Expand all
861 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 850 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
862 MockWrite writes[] = { 851 MockWrite writes[] = {
863 CreateMockWrite(*req1, 0), 852 CreateMockWrite(*req1, 0),
864 }; 853 };
865 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 854 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
866 session_deps_.socket_factory->AddSocketDataProvider(&data); 855 session_deps_.socket_factory->AddSocketDataProvider(&data);
867 856
868 CreateNetworkSession(); 857 CreateNetworkSession();
869 CreateInsecureSpdySession(); 858 CreateInsecureSpdySession();
870 859
871 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 860 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
872 861
873 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 862 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
874 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 863 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
875 test::StreamDelegateDoNothing delegate(spdy_stream); 864 test::StreamDelegateDoNothing delegate(spdy_stream);
876 spdy_stream->SetDelegate(&delegate); 865 spdy_stream->SetDelegate(&delegate);
877 866
878 std::unique_ptr<SpdyHeaderBlock> headers( 867 std::unique_ptr<SpdyHeaderBlock> headers(
879 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 868 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
880 869
881 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 870 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 EXPECT_EQ(kUploadData, delegate2.TakeReceivedData()); 1157 EXPECT_EQ(kUploadData, delegate2.TakeReceivedData());
1169 1158
1170 // Session was destroyed. 1159 // Session was destroyed.
1171 EXPECT_FALSE(session_); 1160 EXPECT_FALSE(session_);
1172 } 1161 }
1173 1162
1174 // Regression test for https://crbug.com/481009. 1163 // Regression test for https://crbug.com/481009.
1175 TEST_P(SpdySessionTest, MaxConcurrentStreamsZero) { 1164 TEST_P(SpdySessionTest, MaxConcurrentStreamsZero) {
1176 session_deps_.host_resolver->set_synchronous_mode(true); 1165 session_deps_.host_resolver->set_synchronous_mode(true);
1177 1166
1178 int seq = 0;
1179 std::vector<MockRead> reads;
1180
1181 // Receive SETTINGS frame that sets max_concurrent_streams to zero. 1167 // Receive SETTINGS frame that sets max_concurrent_streams to zero.
1182 SettingsMap settings_zero; 1168 SettingsMap settings_zero;
1183 settings_zero[SETTINGS_MAX_CONCURRENT_STREAMS] = 1169 settings_zero[SETTINGS_MAX_CONCURRENT_STREAMS] =
1184 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0); 1170 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0);
1185 std::unique_ptr<SpdySerializedFrame> settings_frame_zero( 1171 std::unique_ptr<SpdySerializedFrame> settings_frame_zero(
1186 spdy_util_.ConstructSpdySettings(settings_zero)); 1172 spdy_util_.ConstructSpdySettings(settings_zero));
1187 reads.push_back(CreateMockRead(*settings_frame_zero, seq++));
1188 1173
1189 // Acknowledge it. 1174 // Acknowledge it.
1190 std::vector<MockWrite> writes; 1175 std::unique_ptr<SpdySerializedFrame> settings_ack0(
1191 std::unique_ptr<SpdySerializedFrame> settings_ack0; 1176 spdy_util_.ConstructSpdySettingsAck());
1192 if (GetProtocol() == kProtoHTTP2) {
1193 settings_ack0.reset(spdy_util_.ConstructSpdySettingsAck());
1194 writes.push_back(CreateMockWrite(*settings_ack0, seq++));
1195 }
1196
1197 // Pause.
1198 reads.push_back(MockRead(ASYNC, ERR_IO_PENDING, seq++));
1199 1177
1200 // Receive SETTINGS frame that sets max_concurrent_streams to one. 1178 // Receive SETTINGS frame that sets max_concurrent_streams to one.
1201 SettingsMap settings_one; 1179 SettingsMap settings_one;
1202 settings_one[SETTINGS_MAX_CONCURRENT_STREAMS] = 1180 settings_one[SETTINGS_MAX_CONCURRENT_STREAMS] =
1203 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 1); 1181 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 1);
1204 std::unique_ptr<SpdySerializedFrame> settings_frame_one( 1182 std::unique_ptr<SpdySerializedFrame> settings_frame_one(
1205 spdy_util_.ConstructSpdySettings(settings_one)); 1183 spdy_util_.ConstructSpdySettings(settings_one));
1206 reads.push_back(CreateMockRead(*settings_frame_one, seq++));
1207 1184
1208 // Acknowledge it. 1185 // Acknowledge it.
1209 std::unique_ptr<SpdySerializedFrame> settings_ack1; 1186 std::unique_ptr<SpdySerializedFrame> settings_ack1(
1210 if (GetProtocol() == kProtoHTTP2) { 1187 spdy_util_.ConstructSpdySettingsAck());
1211 settings_ack1.reset(spdy_util_.ConstructSpdySettingsAck());
1212 writes.push_back(CreateMockWrite(*settings_ack1, seq++));
1213 }
1214 1188
1215 // Request and response. 1189 // Request and response.
1216 std::unique_ptr<SpdySerializedFrame> req( 1190 std::unique_ptr<SpdySerializedFrame> req(
1217 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1191 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1218 writes.push_back(CreateMockWrite(*req, seq++));
1219 1192
1220 std::unique_ptr<SpdySerializedFrame> resp( 1193 std::unique_ptr<SpdySerializedFrame> resp(
1221 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1194 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1222 reads.push_back(CreateMockRead(*resp, seq++));
1223 1195
1224 std::unique_ptr<SpdySerializedFrame> body( 1196 std::unique_ptr<SpdySerializedFrame> body(
1225 spdy_util_.ConstructSpdyBodyFrame(1, true)); 1197 spdy_util_.ConstructSpdyBodyFrame(1, true));
1226 reads.push_back(CreateMockRead(*body, seq++));
1227 1198
1228 reads.push_back(MockRead(ASYNC, 0, seq++)); 1199 MockRead reads[] = {CreateMockRead(*settings_frame_zero, 0),
1200 MockRead(ASYNC, ERR_IO_PENDING, 2),
1201 CreateMockRead(*settings_frame_one, 3),
1202 CreateMockRead(*resp, 6),
1203 CreateMockRead(*body, 7),
1204 MockRead(ASYNC, 0, 8)};
1229 1205
1230 SequencedSocketData data(reads.data(), reads.size(), writes.data(), 1206 MockWrite writes[] = {CreateMockWrite(*settings_ack0, 1),
1231 writes.size()); 1207 CreateMockWrite(*settings_ack1, 4),
1208 CreateMockWrite(*req, 5)};
1209
1210 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1232 session_deps_.socket_factory->AddSocketDataProvider(&data); 1211 session_deps_.socket_factory->AddSocketDataProvider(&data);
1233 1212
1234 // Create session. 1213 // Create session.
1235 CreateNetworkSession(); 1214 CreateNetworkSession();
1236 CreateInsecureSpdySession(); 1215 CreateInsecureSpdySession();
1237 1216
1238 // Receive SETTINGS frame that sets max_concurrent_streams to zero. 1217 // Receive SETTINGS frame that sets max_concurrent_streams to zero.
1239 base::RunLoop().RunUntilIdle(); 1218 base::RunLoop().RunUntilIdle();
1240 EXPECT_EQ(0u, session_->max_concurrent_streams_); 1219 EXPECT_EQ(0u, session_->max_concurrent_streams_);
1241 1220
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 1364
1386 base::RunLoop().RunUntilIdle(); 1365 base::RunLoop().RunUntilIdle();
1387 1366
1388 // Verify that there is one unclaimed push stream. 1367 // Verify that there is one unclaimed push stream.
1389 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1368 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1390 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( 1369 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(
1391 GURL("https://www.example.org/a.dat"))); 1370 GURL("https://www.example.org/a.dat")));
1392 1371
1393 // Unclaimed push body consumed bytes from the session window. 1372 // Unclaimed push body consumed bytes from the session window.
1394 EXPECT_EQ( 1373 EXPECT_EQ(
1395 SpdySession::GetDefaultInitialWindowSize(GetProtocol()) - kUploadDataSize, 1374 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2) - kUploadDataSize,
1396 session_->session_recv_window_size_); 1375 session_->session_recv_window_size_);
1397 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 1376 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
1398 1377
1399 // Shift time to expire the push stream. Read the second SYN_STREAM, 1378 // Shift time to expire the push stream. Read the second SYN_STREAM,
1400 // and verify a RST_STREAM was written. 1379 // and verify a RST_STREAM was written.
1401 g_time_delta = base::TimeDelta::FromSeconds(301); 1380 g_time_delta = base::TimeDelta::FromSeconds(301);
1402 data.Resume(); 1381 data.Resume();
1403 base::RunLoop().RunUntilIdle(); 1382 base::RunLoop().RunUntilIdle();
1404 1383
1405 // Verify that the second pushed stream evicted the first pushed stream. 1384 // Verify that the second pushed stream evicted the first pushed stream.
1406 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1385 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1407 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( 1386 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(
1408 GURL("https://www.example.org/0.dat"))); 1387 GURL("https://www.example.org/0.dat")));
1409 1388
1410 // Verify that the session window reclaimed the evicted stream body. 1389 // Verify that the session window reclaimed the evicted stream body.
1411 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), 1390 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
1412 session_->session_recv_window_size_); 1391 session_->session_recv_window_size_);
1413 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 1392 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
1414 1393
1415 // Read and process EOF. 1394 // Read and process EOF.
1416 EXPECT_TRUE(session_); 1395 EXPECT_TRUE(session_);
1417 data.Resume(); 1396 data.Resume();
1418 base::RunLoop().RunUntilIdle(); 1397 base::RunLoop().RunUntilIdle();
1419 EXPECT_FALSE(session_); 1398 EXPECT_FALSE(session_);
1420 } 1399 }
1421 1400
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 1453
1475 // Request kInitialMaxConcurrentStreams + 1 streams. Receive a 1454 // Request kInitialMaxConcurrentStreams + 1 streams. Receive a
1476 // settings frame increasing the max concurrent streams by 1. Make 1455 // settings frame increasing the max concurrent streams by 1. Make
1477 // sure nothing blows up. This is a regression test for 1456 // sure nothing blows up. This is a regression test for
1478 // http://crbug.com/57331 . 1457 // http://crbug.com/57331 .
1479 TEST_P(SpdySessionTest, OnSettings) { 1458 TEST_P(SpdySessionTest, OnSettings) {
1480 session_deps_.host_resolver->set_synchronous_mode(true); 1459 session_deps_.host_resolver->set_synchronous_mode(true);
1481 1460
1482 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS; 1461 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS;
1483 1462
1484 int seq = 0;
1485 std::vector<MockWrite> writes;
1486 std::unique_ptr<SpdySerializedFrame> settings_ack(
1487 spdy_util_.ConstructSpdySettingsAck());
1488 if (GetProtocol() == kProtoHTTP2) {
1489 writes.push_back(CreateMockWrite(*settings_ack, ++seq));
1490 }
1491
1492 SettingsMap new_settings; 1463 SettingsMap new_settings;
1493 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1; 1464 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1;
1494 new_settings[kSpdySettingsIds] = 1465 new_settings[kSpdySettingsIds] =
1495 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1466 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1496 std::unique_ptr<SpdySerializedFrame> settings_frame( 1467 std::unique_ptr<SpdySerializedFrame> settings_frame(
1497 spdy_util_.ConstructSpdySettings(new_settings)); 1468 spdy_util_.ConstructSpdySettings(new_settings));
1498 MockRead reads[] = { 1469 MockRead reads[] = {
1499 CreateMockRead(*settings_frame, 0), 1470 CreateMockRead(*settings_frame, 0), MockRead(ASYNC, ERR_IO_PENDING, 2),
1500 MockRead(ASYNC, ERR_IO_PENDING, ++seq), 1471 MockRead(ASYNC, 0, 3),
1501 MockRead(ASYNC, 0, ++seq),
1502 }; 1472 };
1503 1473
1504 SequencedSocketData data(reads, arraysize(reads), writes.data(), 1474 std::unique_ptr<SpdySerializedFrame> settings_ack(
1505 writes.size()); 1475 spdy_util_.ConstructSpdySettingsAck());
1476 MockWrite writes[] = {CreateMockWrite(*settings_ack, 1)};
1477
1478 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1506 session_deps_.socket_factory->AddSocketDataProvider(&data); 1479 session_deps_.socket_factory->AddSocketDataProvider(&data);
1507 1480
1508 CreateNetworkSession(); 1481 CreateNetworkSession();
1509 CreateInsecureSpdySession(); 1482 CreateInsecureSpdySession();
1510 1483
1511 // Create the maximum number of concurrent streams. 1484 // Create the maximum number of concurrent streams.
1512 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) { 1485 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) {
1513 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 1486 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
1514 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 1487 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
1515 ASSERT_TRUE(spdy_stream); 1488 ASSERT_TRUE(spdy_stream);
(...skipping 11 matching lines...) Expand all
1527 EXPECT_THAT(stream_releaser.WaitForResult(), IsOk()); 1500 EXPECT_THAT(stream_releaser.WaitForResult(), IsOk());
1528 1501
1529 data.Resume(); 1502 data.Resume();
1530 base::RunLoop().RunUntilIdle(); 1503 base::RunLoop().RunUntilIdle();
1531 EXPECT_FALSE(session_); 1504 EXPECT_FALSE(session_);
1532 1505
1533 EXPECT_TRUE(data.AllWriteDataConsumed()); 1506 EXPECT_TRUE(data.AllWriteDataConsumed());
1534 EXPECT_TRUE(data.AllReadDataConsumed()); 1507 EXPECT_TRUE(data.AllReadDataConsumed());
1535 } 1508 }
1536 1509
1537 // Start with a persisted value for max concurrent streams. Receive a
1538 // settings frame increasing the max concurrent streams by 1 and which
1539 // also clears the persisted data. Verify that persisted data is
1540 // correct.
1541 TEST_P(SpdySessionTest, ClearSettings) {
1542 if (spdy_util_.spdy_version() >= HTTP2) {
1543 // HTTP/2 doesn't include settings persistence, or a CLEAR_SETTINGS flag.
1544 // Flag 0x1, CLEAR_SETTINGS in SPDY3, is instead settings ACK in HTTP/2.
1545 return;
1546 }
1547 session_deps_.host_resolver->set_synchronous_mode(true);
1548
1549 SettingsMap new_settings;
1550 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1;
1551 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1552 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1553 std::unique_ptr<SpdySerializedFrame> settings_frame(
1554 spdy_util_.ConstructSpdySettings(new_settings));
1555 uint8_t flags = SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS;
1556 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version());
1557 MockRead reads[] = {
1558 CreateMockRead(*settings_frame, 0),
1559 MockRead(ASYNC, ERR_IO_PENDING, 1),
1560 MockRead(ASYNC, 0, 2),
1561 };
1562
1563 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
1564 session_deps_.socket_factory->AddSocketDataProvider(&data);
1565
1566 // Load a cert that is valid for:
1567 // www.example.org
1568 // mail.example.org
1569 // mail.example.com
1570 base::FilePath certs_dir = GetTestCertsDirectory();
1571 scoped_refptr<X509Certificate> test_cert(
1572 ImportCertFromFile(certs_dir, "spdy_pooling.pem"));
1573 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get());
1574
1575 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
1576 ssl.cert = test_cert;
1577 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
1578
1579 CreateNetworkSession();
1580
1581 // Initialize the SpdySetting with the default.
1582 spdy_session_pool_->http_server_properties()->SetSpdySetting(
1583 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS,
1584 SETTINGS_FLAG_PLEASE_PERSIST, kInitialMaxConcurrentStreams);
1585
1586 EXPECT_FALSE(spdy_session_pool_->http_server_properties()
1587 ->GetSpdySettings(test_server_)
1588 .empty());
1589
1590 CreateSecureSpdySession();
1591
1592 // Create the maximum number of concurrent streams.
1593 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) {
1594 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
1595 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
1596 ASSERT_TRUE(spdy_stream);
1597 }
1598
1599 StreamReleaserCallback stream_releaser;
1600
1601 SpdyStreamRequest request;
1602 ASSERT_EQ(ERR_IO_PENDING,
1603 request.StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, test_url_,
1604 MEDIUM, BoundNetLog(),
1605 stream_releaser.MakeCallback(&request)));
1606
1607 base::RunLoop().RunUntilIdle();
1608
1609 EXPECT_THAT(stream_releaser.WaitForResult(), IsOk());
1610
1611 // Make sure that persisted data is cleared.
1612 EXPECT_TRUE(spdy_session_pool_->http_server_properties()
1613 ->GetSpdySettings(test_server_)
1614 .empty());
1615
1616 // Make sure session's max_concurrent_streams is correct.
1617 EXPECT_EQ(kInitialMaxConcurrentStreams + 1,
1618 session_->max_concurrent_streams_);
1619
1620 data.Resume();
1621 base::RunLoop().RunUntilIdle();
1622 EXPECT_FALSE(session_);
1623 }
1624
1625 // Start with max concurrent streams set to 1. Request two streams. 1510 // Start with max concurrent streams set to 1. Request two streams.
1626 // When the first completes, have the callback close its stream, which 1511 // When the first completes, have the callback close its stream, which
1627 // should trigger the second stream creation. Then cancel that one 1512 // should trigger the second stream creation. Then cancel that one
1628 // immediately. Don't crash. This is a regression test for 1513 // immediately. Don't crash. This is a regression test for
1629 // http://crbug.com/63532 . 1514 // http://crbug.com/63532 .
1630 TEST_P(SpdySessionTest, CancelPendingCreateStream) { 1515 TEST_P(SpdySessionTest, CancelPendingCreateStream) {
1631 session_deps_.host_resolver->set_synchronous_mode(true); 1516 session_deps_.host_resolver->set_synchronous_mode(true);
1632 1517
1633 MockRead reads[] = { 1518 MockRead reads[] = {
1634 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 1519 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 1568
1684 MockRead reads[] = { 1569 MockRead reads[] = {
1685 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 1570 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
1686 }; 1571 };
1687 1572
1688 SettingsMap settings; 1573 SettingsMap settings;
1689 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1574 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1690 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams); 1575 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams);
1691 std::unique_ptr<SpdySerializedFrame> settings_frame( 1576 std::unique_ptr<SpdySerializedFrame> settings_frame(
1692 spdy_util_.ConstructSpdySettings(settings)); 1577 spdy_util_.ConstructSpdySettings(settings));
1693 std::vector<MockWrite> writes; 1578 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix,
1694 if (GetProtocol() == kProtoHTTP2) { 1579 kHttp2ConnectionHeaderPrefixSize),
1695 writes.push_back( 1580 CreateMockWrite(*settings_frame)};
1696 MockWrite(ASYNC,
1697 kHttp2ConnectionHeaderPrefix,
1698 kHttp2ConnectionHeaderPrefixSize));
1699 }
1700 writes.push_back(CreateMockWrite(*settings_frame));
1701 1581
1702 SettingsMap server_settings; 1582 StaticSocketDataProvider data(reads, arraysize(reads), writes,
1703 const uint32_t initial_max_concurrent_streams = 1; 1583 arraysize(writes));
1704 server_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1705 SettingsFlagsAndValue(SETTINGS_FLAG_PERSISTED,
1706 initial_max_concurrent_streams);
1707 std::unique_ptr<SpdySerializedFrame> server_settings_frame(
1708 spdy_util_.ConstructSpdySettings(server_settings));
1709 if (GetProtocol() == kProtoSPDY31) {
1710 writes.push_back(CreateMockWrite(*server_settings_frame));
1711 }
1712
1713 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(),
1714 writes.size());
1715 session_deps_.socket_factory->AddSocketDataProvider(&data); 1584 session_deps_.socket_factory->AddSocketDataProvider(&data);
1716 1585
1717 // Load a cert that is valid for: 1586 // Load a cert that is valid for:
1718 // www.example.org 1587 // www.example.org
1719 // mail.example.org 1588 // mail.example.org
1720 // mail.example.com 1589 // mail.example.com
1721 base::FilePath certs_dir = GetTestCertsDirectory(); 1590 base::FilePath certs_dir = GetTestCertsDirectory();
1722 scoped_refptr<X509Certificate> test_cert( 1591 scoped_refptr<X509Certificate> test_cert(
1723 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); 1592 ImportCertFromFile(certs_dir, "spdy_pooling.pem"));
1724 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); 1593 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get());
1725 1594
1726 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 1595 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
1727 ssl.cert = test_cert; 1596 ssl.cert = test_cert;
1728 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 1597 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
1729 1598
1730 CreateNetworkSession(); 1599 CreateNetworkSession();
1731 1600
1601 const uint32_t initial_max_concurrent_streams = 1;
1732 spdy_session_pool_->http_server_properties()->SetSpdySetting( 1602 spdy_session_pool_->http_server_properties()->SetSpdySetting(
1733 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS, 1603 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS,
1734 SETTINGS_FLAG_PLEASE_PERSIST, initial_max_concurrent_streams); 1604 SETTINGS_FLAG_PLEASE_PERSIST, initial_max_concurrent_streams);
1735 1605
1736 SpdySessionPoolPeer pool_peer(spdy_session_pool_); 1606 SpdySessionPoolPeer pool_peer(spdy_session_pool_);
1737 pool_peer.SetEnableSendingInitialData(true); 1607 pool_peer.SetEnableSendingInitialData(true);
1738 1608
1739 CreateSecureSpdySession(); 1609 CreateSecureSpdySession();
1740 1610
1741 base::RunLoop().RunUntilIdle(); 1611 base::RunLoop().RunUntilIdle();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 base::RunLoop().RunUntilIdle(); 1683 base::RunLoop().RunUntilIdle();
1814 1684
1815 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 1685 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
1816 EXPECT_FALSE(session_); 1686 EXPECT_FALSE(session_);
1817 1687
1818 // Check that the NetLog was filled reasonably. 1688 // Check that the NetLog was filled reasonably.
1819 TestNetLogEntry::List entries; 1689 TestNetLogEntry::List entries;
1820 log_.GetEntries(&entries); 1690 log_.GetEntries(&entries);
1821 EXPECT_LT(0u, entries.size()); 1691 EXPECT_LT(0u, entries.size());
1822 1692
1823 if (GetProtocol() == kProtoHTTP2) { 1693 int pos = ExpectLogContainsSomewhere(
1824 int pos = ExpectLogContainsSomewhere( 1694 entries, 0, NetLog::TYPE_HTTP2_SESSION_GOAWAY, NetLog::PHASE_NONE);
1825 entries, 0, NetLog::TYPE_HTTP2_SESSION_GOAWAY, NetLog::PHASE_NONE); 1695 TestNetLogEntry entry = entries[pos];
1826 TestNetLogEntry entry = entries[pos]; 1696 int last_accepted_stream_id;
1827 int last_accepted_stream_id; 1697 ASSERT_TRUE(entry.GetIntegerValue("last_accepted_stream_id",
1828 ASSERT_TRUE(entry.GetIntegerValue("last_accepted_stream_id", 1698 &last_accepted_stream_id));
1829 &last_accepted_stream_id)); 1699 EXPECT_EQ(42, last_accepted_stream_id);
1830 EXPECT_EQ(42, last_accepted_stream_id); 1700 int active_streams;
1831 int active_streams; 1701 ASSERT_TRUE(entry.GetIntegerValue("active_streams", &active_streams));
1832 ASSERT_TRUE(entry.GetIntegerValue("active_streams", &active_streams)); 1702 EXPECT_EQ(0, active_streams);
1833 EXPECT_EQ(0, active_streams); 1703 int unclaimed_streams;
1834 int unclaimed_streams; 1704 ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams));
1835 ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams)); 1705 EXPECT_EQ(0, unclaimed_streams);
1836 EXPECT_EQ(0, unclaimed_streams); 1706 int status;
1837 int status; 1707 ASSERT_TRUE(entry.GetIntegerValue("status", &status));
1838 ASSERT_TRUE(entry.GetIntegerValue("status", &status)); 1708 EXPECT_EQ(GOAWAY_ENHANCE_YOUR_CALM, status);
1839 EXPECT_EQ(GOAWAY_ENHANCE_YOUR_CALM, status); 1709 std::string debug_data;
1840 std::string debug_data; 1710 ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data));
1841 ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data)); 1711 EXPECT_EQ("foo", debug_data);
1842 EXPECT_EQ("foo", debug_data);
1843 }
1844 1712
1845 // Check that we logged SPDY_SESSION_CLOSE correctly. 1713 // Check that we logged SPDY_SESSION_CLOSE correctly.
1846 int pos = ExpectLogContainsSomewhere( 1714 pos = ExpectLogContainsSomewhere(entries, 0, NetLog::TYPE_HTTP2_SESSION_CLOSE,
1847 entries, 0, NetLog::TYPE_HTTP2_SESSION_CLOSE, NetLog::PHASE_NONE); 1715 NetLog::PHASE_NONE);
1848 TestNetLogEntry entry = entries[pos]; 1716 entry = entries[pos];
1849 int error_code = 0; 1717 int error_code = 0;
1850 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); 1718 ASSERT_TRUE(entry.GetNetErrorCode(&error_code));
1851 EXPECT_THAT(error_code, IsOk()); 1719 EXPECT_THAT(error_code, IsOk());
1852 } 1720 }
1853 1721
1854 TEST_P(SpdySessionTest, NetLogOnSessionEOF) { 1722 TEST_P(SpdySessionTest, NetLogOnSessionEOF) {
1855 session_deps_.host_resolver->set_synchronous_mode(true); 1723 session_deps_.host_resolver->set_synchronous_mode(true);
1856 1724
1857 MockRead reads[] = { 1725 MockRead reads[] = {
1858 MockRead(SYNCHRONOUS, 0, 0) // EOF 1726 MockRead(SYNCHRONOUS, 0, 0) // EOF
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1913 std::unique_ptr<SpdyHeaderBlock> headers( 1781 std::unique_ptr<SpdyHeaderBlock> headers(
1914 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 1782 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
1915 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 1783 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
1916 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); 1784 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
1917 1785
1918 // Write request headers & capture resulting histogram update. 1786 // Write request headers & capture resulting histogram update.
1919 base::HistogramTester histogram_tester; 1787 base::HistogramTester histogram_tester;
1920 1788
1921 base::RunLoop().RunUntilIdle(); 1789 base::RunLoop().RunUntilIdle();
1922 // Regression test of compression performance under the request fixture. 1790 // Regression test of compression performance under the request fixture.
1923 switch (spdy_util_.spdy_version()) {
1924 case SPDY3:
1925 #if defined(USE_SYSTEM_ZLIB)
1926 histogram_tester.ExpectBucketCount(
1927 "Net.SpdySynStreamCompressionPercentage", 30, 1);
1928 #else
1929 histogram_tester.ExpectBucketCount(
1930 "Net.SpdySynStreamCompressionPercentage", 31, 1);
1931 #endif
1932 break;
1933 case HTTP2:
1934 histogram_tester.ExpectBucketCount( 1791 histogram_tester.ExpectBucketCount(
1935 "Net.SpdySynStreamCompressionPercentage", 81, 1); 1792 "Net.SpdySynStreamCompressionPercentage", 81, 1);
1936 break;
1937 default:
1938 NOTREACHED();
1939 }
1940 1793
1941 // Read and process EOF. 1794 // Read and process EOF.
1942 EXPECT_TRUE(session_); 1795 EXPECT_TRUE(session_);
1943 data.Resume(); 1796 data.Resume();
1944 base::RunLoop().RunUntilIdle(); 1797 base::RunLoop().RunUntilIdle();
1945 EXPECT_FALSE(session_); 1798 EXPECT_FALSE(session_);
1946 } 1799 }
1947 1800
1948 // Queue up a low-priority SYN_STREAM followed by a high-priority 1801 // Queue up a low-priority SYN_STREAM followed by a high-priority
1949 // one. The high priority one should still send first and receive 1802 // one. The high priority one should still send first and receive
(...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after
2726 } 2579 }
2727 2580
2728 // Test that SpdySession::DoReadLoop reads data from the socket 2581 // Test that SpdySession::DoReadLoop reads data from the socket
2729 // without yielding. This test makes 32k - 1 bytes of data available 2582 // without yielding. This test makes 32k - 1 bytes of data available
2730 // on the socket for reading. It then verifies that it has read all 2583 // on the socket for reading. It then verifies that it has read all
2731 // the available data without yielding. 2584 // the available data without yielding.
2732 TEST_P(SpdySessionTest, ReadDataWithoutYielding) { 2585 TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
2733 session_deps_.host_resolver->set_synchronous_mode(true); 2586 session_deps_.host_resolver->set_synchronous_mode(true);
2734 session_deps_.time_func = InstantaneousReads; 2587 session_deps_.time_func = InstantaneousReads;
2735 2588
2736 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2589 BufferedSpdyFramer framer(HTTP2);
2737 2590
2738 std::unique_ptr<SpdySerializedFrame> req1( 2591 std::unique_ptr<SpdySerializedFrame> req1(
2739 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2592 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2740 MockWrite writes[] = { 2593 MockWrite writes[] = {
2741 CreateMockWrite(*req1, 0), 2594 CreateMockWrite(*req1, 0),
2742 }; 2595 };
2743 2596
2744 // Build buffer of size kYieldAfterBytesRead / 4 2597 // Build buffer of size kYieldAfterBytesRead / 4
2745 // (-spdy_data_frame_size). 2598 // (-spdy_data_frame_size).
2746 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2599 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2813 EXPECT_TRUE(data.AllReadDataConsumed()); 2666 EXPECT_TRUE(data.AllReadDataConsumed());
2814 } 2667 }
2815 2668
2816 // Test that SpdySession::DoReadLoop yields if more than 2669 // Test that SpdySession::DoReadLoop yields if more than
2817 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time 2670 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time
2818 // function that makes the response frame look very slow to read. 2671 // function that makes the response frame look very slow to read.
2819 TEST_P(SpdySessionTest, TestYieldingSlowReads) { 2672 TEST_P(SpdySessionTest, TestYieldingSlowReads) {
2820 session_deps_.host_resolver->set_synchronous_mode(true); 2673 session_deps_.host_resolver->set_synchronous_mode(true);
2821 session_deps_.time_func = SlowReads; 2674 session_deps_.time_func = SlowReads;
2822 2675
2823 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2676 BufferedSpdyFramer framer(HTTP2);
2824 2677
2825 std::unique_ptr<SpdySerializedFrame> req1( 2678 std::unique_ptr<SpdySerializedFrame> req1(
2826 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2679 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2827 MockWrite writes[] = { 2680 MockWrite writes[] = {
2828 CreateMockWrite(*req1, 0), 2681 CreateMockWrite(*req1, 0),
2829 }; 2682 };
2830 2683
2831 std::unique_ptr<SpdySerializedFrame> resp1( 2684 std::unique_ptr<SpdySerializedFrame> resp1(
2832 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2685 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2833 2686
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2874 EXPECT_TRUE(data.AllWriteDataConsumed()); 2727 EXPECT_TRUE(data.AllWriteDataConsumed());
2875 EXPECT_TRUE(data.AllReadDataConsumed()); 2728 EXPECT_TRUE(data.AllReadDataConsumed());
2876 } 2729 }
2877 2730
2878 // Regression test for https://crbug.com/531570. 2731 // Regression test for https://crbug.com/531570.
2879 // Test the case where DoRead() takes long but returns synchronously. 2732 // Test the case where DoRead() takes long but returns synchronously.
2880 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) { 2733 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) {
2881 session_deps_.host_resolver->set_synchronous_mode(true); 2734 session_deps_.host_resolver->set_synchronous_mode(true);
2882 session_deps_.time_func = SlowReads; 2735 session_deps_.time_func = SlowReads;
2883 2736
2884 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2737 BufferedSpdyFramer framer(HTTP2);
2885 2738
2886 std::unique_ptr<SpdySerializedFrame> req1( 2739 std::unique_ptr<SpdySerializedFrame> req1(
2887 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2740 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2888 MockWrite writes[] = { 2741 MockWrite writes[] = {
2889 CreateMockWrite(*req1, 0), 2742 CreateMockWrite(*req1, 0),
2890 }; 2743 };
2891 2744
2892 std::unique_ptr<SpdySerializedFrame> partial_data_frame( 2745 std::unique_ptr<SpdySerializedFrame> partial_data_frame(
2893 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE)); 2746 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE));
2894 std::unique_ptr<SpdySerializedFrame> finish_data_frame( 2747 std::unique_ptr<SpdySerializedFrame> finish_data_frame(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2942 2795
2943 // Test that SpdySession::DoReadLoop yields while reading the 2796 // Test that SpdySession::DoReadLoop yields while reading the
2944 // data. This test makes 32k + 1 bytes of data available on the socket 2797 // data. This test makes 32k + 1 bytes of data available on the socket
2945 // for reading. It then verifies that DoRead has yielded even though 2798 // for reading. It then verifies that DoRead has yielded even though
2946 // there is data available for it to read (i.e, socket()->Read didn't 2799 // there is data available for it to read (i.e, socket()->Read didn't
2947 // return ERR_IO_PENDING during socket reads). 2800 // return ERR_IO_PENDING during socket reads).
2948 TEST_P(SpdySessionTest, TestYieldingDuringReadData) { 2801 TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
2949 session_deps_.host_resolver->set_synchronous_mode(true); 2802 session_deps_.host_resolver->set_synchronous_mode(true);
2950 session_deps_.time_func = InstantaneousReads; 2803 session_deps_.time_func = InstantaneousReads;
2951 2804
2952 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2805 BufferedSpdyFramer framer(HTTP2);
2953 2806
2954 std::unique_ptr<SpdySerializedFrame> req1( 2807 std::unique_ptr<SpdySerializedFrame> req1(
2955 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2808 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2956 MockWrite writes[] = { 2809 MockWrite writes[] = {
2957 CreateMockWrite(*req1, 0), 2810 CreateMockWrite(*req1, 0),
2958 }; 2811 };
2959 2812
2960 // Build buffer of size kYieldAfterBytesRead / 4 2813 // Build buffer of size kYieldAfterBytesRead / 4
2961 // (-spdy_data_frame_size). 2814 // (-spdy_data_frame_size).
2962 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2815 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
3036 // 2889 //
3037 // The above reads 26K synchronously. Since that is less that 32K, we 2890 // The above reads 26K synchronously. Since that is less that 32K, we
3038 // will attempt to read again. However, that DoRead() will return 2891 // will attempt to read again. However, that DoRead() will return
3039 // ERR_IO_PENDING (because of async read), so DoReadLoop() will 2892 // ERR_IO_PENDING (because of async read), so DoReadLoop() will
3040 // yield. When we come back, DoRead() will read the results from the 2893 // yield. When we come back, DoRead() will read the results from the
3041 // async read, and rest of the data synchronously. 2894 // async read, and rest of the data synchronously.
3042 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) { 2895 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
3043 session_deps_.host_resolver->set_synchronous_mode(true); 2896 session_deps_.host_resolver->set_synchronous_mode(true);
3044 session_deps_.time_func = InstantaneousReads; 2897 session_deps_.time_func = InstantaneousReads;
3045 2898
3046 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2899 BufferedSpdyFramer framer(HTTP2);
3047 2900
3048 std::unique_ptr<SpdySerializedFrame> req1( 2901 std::unique_ptr<SpdySerializedFrame> req1(
3049 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2902 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
3050 MockWrite writes[] = { 2903 MockWrite writes[] = {
3051 CreateMockWrite(*req1, 0), 2904 CreateMockWrite(*req1, 0),
3052 }; 2905 };
3053 2906
3054 // Build buffer of size kYieldAfterBytesRead / 4 2907 // Build buffer of size kYieldAfterBytesRead / 4
3055 // (-spdy_data_frame_size). 2908 // (-spdy_data_frame_size).
3056 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2909 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
3135 EXPECT_EQ(1u, observer.executed_count()); 2988 EXPECT_EQ(1u, observer.executed_count());
3136 EXPECT_TRUE(data.AllWriteDataConsumed()); 2989 EXPECT_TRUE(data.AllWriteDataConsumed());
3137 EXPECT_TRUE(data.AllReadDataConsumed()); 2990 EXPECT_TRUE(data.AllReadDataConsumed());
3138 } 2991 }
3139 2992
3140 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure 2993 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure
3141 // nothing blows up. 2994 // nothing blows up.
3142 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) { 2995 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
3143 session_deps_.host_resolver->set_synchronous_mode(true); 2996 session_deps_.host_resolver->set_synchronous_mode(true);
3144 2997
3145 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2998 BufferedSpdyFramer framer(HTTP2);
3146 2999
3147 std::unique_ptr<SpdySerializedFrame> req1( 3000 std::unique_ptr<SpdySerializedFrame> req1(
3148 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 3001 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
3149 MockWrite writes[] = { 3002 MockWrite writes[] = {
3150 CreateMockWrite(*req1, 0), 3003 CreateMockWrite(*req1, 0),
3151 }; 3004 };
3152 3005
3153 std::unique_ptr<SpdySerializedFrame> resp1( 3006 std::unique_ptr<SpdySerializedFrame> resp1(
3154 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3007 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3155 std::unique_ptr<SpdySerializedFrame> body1( 3008 std::unique_ptr<SpdySerializedFrame> body1(
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3205 3058
3206 MockRead reads[] = { 3059 MockRead reads[] = {
3207 MockRead(SYNCHRONOUS, 0, 0) // EOF 3060 MockRead(SYNCHRONOUS, 0, 0) // EOF
3208 }; 3061 };
3209 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 3062 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
3210 session_deps_.socket_factory->AddSocketDataProvider(&data); 3063 session_deps_.socket_factory->AddSocketDataProvider(&data);
3211 3064
3212 CreateNetworkSession(); 3065 CreateNetworkSession();
3213 session_ = CreateFakeSpdySession(spdy_session_pool_, key_); 3066 session_ = CreateFakeSpdySession(spdy_session_pool_, key_);
3214 3067
3215 EXPECT_EQ(spdy_util_.spdy_version(), 3068 EXPECT_EQ(HTTP2, session_->buffered_spdy_framer_->protocol_version());
3216 session_->buffered_spdy_framer_->protocol_version()); 3069 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3217 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()),
3218 session_->session_send_window_size_); 3070 session_->session_send_window_size_);
3219 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), 3071 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3220 session_->session_recv_window_size_); 3072 session_->session_recv_window_size_);
3221 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3073 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3222 } 3074 }
3223 3075
3224 // Tests the case of a non-SPDY request closing an idle SPDY session when no 3076 // Tests the case of a non-SPDY request closing an idle SPDY session when no
3225 // pointers to the idle session are currently held. 3077 // pointers to the idle session are currently held.
3226 TEST_P(SpdySessionTest, CloseOneIdleConnection) { 3078 TEST_P(SpdySessionTest, CloseOneIdleConnection) {
3227 ClientSocketPoolManager::set_max_sockets_per_group( 3079 ClientSocketPoolManager::set_max_sockets_per_group(
3228 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3080 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3229 ClientSocketPoolManager::set_max_sockets_per_pool( 3081 ClientSocketPoolManager::set_max_sockets_per_pool(
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
3610 } 3462 }
3611 3463
3612 // SpdySession::{Increase,Decrease}RecvWindowSize should properly 3464 // SpdySession::{Increase,Decrease}RecvWindowSize should properly
3613 // adjust the session receive window size. In addition, 3465 // adjust the session receive window size. In addition,
3614 // SpdySession::IncreaseRecvWindowSize should trigger 3466 // SpdySession::IncreaseRecvWindowSize should trigger
3615 // sending a WINDOW_UPDATE frame for a large enough delta. 3467 // sending a WINDOW_UPDATE frame for a large enough delta.
3616 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { 3468 TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
3617 session_deps_.host_resolver->set_synchronous_mode(true); 3469 session_deps_.host_resolver->set_synchronous_mode(true);
3618 3470
3619 const int32_t initial_window_size = 3471 const int32_t initial_window_size =
3620 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); 3472 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
3621 const int32_t delta_window_size = 100; 3473 const int32_t delta_window_size = 100;
3622 3474
3623 MockRead reads[] = { 3475 MockRead reads[] = {
3624 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 3476 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
3625 }; 3477 };
3626 std::unique_ptr<SpdySerializedFrame> window_update( 3478 std::unique_ptr<SpdySerializedFrame> window_update(
3627 spdy_util_.ConstructSpdyWindowUpdate( 3479 spdy_util_.ConstructSpdyWindowUpdate(
3628 kSessionFlowControlStreamId, 3480 kSessionFlowControlStreamId,
3629 initial_window_size + delta_window_size)); 3481 initial_window_size + delta_window_size));
3630 MockWrite writes[] = { 3482 MockWrite writes[] = {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3675 MockRead reads[] = { 3527 MockRead reads[] = {
3676 MockRead(SYNCHRONOUS, 0, 0) // EOF 3528 MockRead(SYNCHRONOUS, 0, 0) // EOF
3677 }; 3529 };
3678 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 3530 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
3679 session_deps_.socket_factory->AddSocketDataProvider(&data); 3531 session_deps_.socket_factory->AddSocketDataProvider(&data);
3680 3532
3681 CreateNetworkSession(); 3533 CreateNetworkSession();
3682 session_ = CreateFakeSpdySession(spdy_session_pool_, key_); 3534 session_ = CreateFakeSpdySession(spdy_session_pool_, key_);
3683 3535
3684 const int32_t initial_window_size = 3536 const int32_t initial_window_size =
3685 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); 3537 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
3686 const int32_t delta_window_size = 100; 3538 const int32_t delta_window_size = 100;
3687 3539
3688 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3540 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
3689 3541
3690 session_->IncreaseSendWindowSize(delta_window_size); 3542 session_->IncreaseSendWindowSize(delta_window_size);
3691 EXPECT_EQ(initial_window_size + delta_window_size, 3543 EXPECT_EQ(initial_window_size + delta_window_size,
3692 session_->session_send_window_size_); 3544 session_->session_send_window_size_);
3693 3545
3694 session_->DecreaseSendWindowSize(delta_window_size); 3546 session_->DecreaseSendWindowSize(delta_window_size);
3695 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3547 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
(...skipping 11 matching lines...) Expand all
3707 CreateMockRead(*resp, 0), 3559 CreateMockRead(*resp, 0),
3708 MockRead(ASYNC, ERR_IO_PENDING, 1), 3560 MockRead(ASYNC, ERR_IO_PENDING, 1),
3709 MockRead(ASYNC, 0, 2) // EOF 3561 MockRead(ASYNC, 0, 2) // EOF
3710 }; 3562 };
3711 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3563 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3712 session_deps_.socket_factory->AddSocketDataProvider(&data); 3564 session_deps_.socket_factory->AddSocketDataProvider(&data);
3713 3565
3714 CreateNetworkSession(); 3566 CreateNetworkSession();
3715 CreateInsecureSpdySession(); 3567 CreateInsecureSpdySession();
3716 3568
3717 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), 3569 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3718 session_->session_recv_window_size_); 3570 session_->session_recv_window_size_);
3719 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3571 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3720 3572
3721 base::RunLoop().RunUntilIdle(); 3573 base::RunLoop().RunUntilIdle();
3722 3574
3723 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), 3575 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3724 session_->session_recv_window_size_); 3576 session_->session_recv_window_size_);
3725 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 3577 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
3726 3578
3727 EXPECT_TRUE(session_); 3579 EXPECT_TRUE(session_);
3728 data.Resume(); 3580 data.Resume();
3729 base::RunLoop().RunUntilIdle(); 3581 base::RunLoop().RunUntilIdle();
3730 EXPECT_FALSE(session_); 3582 EXPECT_FALSE(session_);
3731 } 3583 }
3732 3584
3733 // The frame header is not included in flow control, but frame payload 3585 // The frame header is not included in flow control, but frame payload
3734 // (including optional pad length and padding) is. 3586 // (including optional pad length and padding) is.
3735 TEST_P(SpdySessionTest, SessionFlowControlPadding) { 3587 TEST_P(SpdySessionTest, SessionFlowControlPadding) {
3736 // Padding only exists in HTTP/2.
3737 if (GetProtocol() < kProtoHTTP2)
3738 return;
3739
3740 session_deps_.host_resolver->set_synchronous_mode(true); 3588 session_deps_.host_resolver->set_synchronous_mode(true);
3741 3589
3742 const int padding_length = 42; 3590 const int padding_length = 42;
3743 std::unique_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdyBodyFrame( 3591 std::unique_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdyBodyFrame(
3744 1, kUploadData, kUploadDataSize, false, padding_length)); 3592 1, kUploadData, kUploadDataSize, false, padding_length));
3745 MockRead reads[] = { 3593 MockRead reads[] = {
3746 CreateMockRead(*resp, 0), 3594 CreateMockRead(*resp, 0),
3747 MockRead(ASYNC, ERR_IO_PENDING, 1), 3595 MockRead(ASYNC, ERR_IO_PENDING, 1),
3748 MockRead(ASYNC, 0, 2) // EOF 3596 MockRead(ASYNC, 0, 2) // EOF
3749 }; 3597 };
3750 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3598 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3751 session_deps_.socket_factory->AddSocketDataProvider(&data); 3599 session_deps_.socket_factory->AddSocketDataProvider(&data);
3752 3600
3753 CreateNetworkSession(); 3601 CreateNetworkSession();
3754 CreateInsecureSpdySession(); 3602 CreateInsecureSpdySession();
3755 3603
3756 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), 3604 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3757 session_->session_recv_window_size_); 3605 session_->session_recv_window_size_);
3758 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3606 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3759 3607
3760 base::RunLoop().RunUntilIdle(); 3608 base::RunLoop().RunUntilIdle();
3761 3609
3762 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), 3610 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3763 session_->session_recv_window_size_); 3611 session_->session_recv_window_size_);
3764 EXPECT_EQ(kUploadDataSize + padding_length, 3612 EXPECT_EQ(kUploadDataSize + padding_length,
3765 session_->session_unacked_recv_window_bytes_); 3613 session_->session_unacked_recv_window_bytes_);
3766 3614
3767 data.Resume(); 3615 data.Resume();
3768 base::RunLoop().RunUntilIdle(); 3616 base::RunLoop().RunUntilIdle();
3769 EXPECT_FALSE(session_); 3617 EXPECT_FALSE(session_);
3770 } 3618 }
3771 3619
3772 // Peer sends more data than stream level receiving flow control window. 3620 // Peer sends more data than stream level receiving flow control window.
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
4042 DropReceivedDataDelegate delegate(stream, msg_data); 3890 DropReceivedDataDelegate delegate(stream, msg_data);
4043 stream->SetDelegate(&delegate); 3891 stream->SetDelegate(&delegate);
4044 3892
4045 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( 3893 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock(
4046 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); 3894 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize)));
4047 EXPECT_EQ(ERR_IO_PENDING, 3895 EXPECT_EQ(ERR_IO_PENDING,
4048 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); 3896 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND));
4049 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3897 EXPECT_TRUE(stream->HasUrlFromHeaders());
4050 3898
4051 const int32_t initial_window_size = 3899 const int32_t initial_window_size =
4052 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); 3900 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
4053 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 3901 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
4054 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3902 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
4055 3903
4056 base::RunLoop().RunUntilIdle(); 3904 base::RunLoop().RunUntilIdle();
4057 3905
4058 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 3906 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
4059 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_); 3907 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_);
4060 3908
4061 stream->Close(); 3909 stream->Close();
4062 EXPECT_FALSE(stream); 3910 EXPECT_FALSE(stream);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4108 test::StreamDelegateSendImmediate delegate(stream, msg_data); 3956 test::StreamDelegateSendImmediate delegate(stream, msg_data);
4109 stream->SetDelegate(&delegate); 3957 stream->SetDelegate(&delegate);
4110 3958
4111 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( 3959 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock(
4112 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); 3960 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize)));
4113 EXPECT_EQ(ERR_IO_PENDING, 3961 EXPECT_EQ(ERR_IO_PENDING,
4114 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); 3962 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND));
4115 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3963 EXPECT_TRUE(stream->HasUrlFromHeaders());
4116 3964
4117 const int32_t initial_window_size = 3965 const int32_t initial_window_size =
4118 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); 3966 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
4119 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3967 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
4120 3968
4121 // Write request. 3969 // Write request.
4122 base::RunLoop().RunUntilIdle(); 3970 base::RunLoop().RunUntilIdle();
4123 3971
4124 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3972 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
4125 3973
4126 // Read response, but do not run the message loop, so that the body is not 3974 // Read response, but do not run the message loop, so that the body is not
4127 // written to the socket. 3975 // written to the socket.
4128 data.Resume(); 3976 data.Resume();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4193 test::StreamDelegateSendImmediate delegate(stream, msg_data); 4041 test::StreamDelegateSendImmediate delegate(stream, msg_data);
4194 stream->SetDelegate(&delegate); 4042 stream->SetDelegate(&delegate);
4195 4043
4196 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( 4044 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock(
4197 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); 4045 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize)));
4198 EXPECT_EQ(ERR_IO_PENDING, 4046 EXPECT_EQ(ERR_IO_PENDING,
4199 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); 4047 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND));
4200 EXPECT_TRUE(stream->HasUrlFromHeaders()); 4048 EXPECT_TRUE(stream->HasUrlFromHeaders());
4201 4049
4202 const int32_t initial_window_size = 4050 const int32_t initial_window_size =
4203 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); 4051 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
4204 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 4052 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
4205 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 4053 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
4206 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 4054 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
4207 4055
4208 // Send request and message. 4056 // Send request and message.
4209 base::RunLoop().RunUntilIdle(); 4057 base::RunLoop().RunUntilIdle();
4210 4058
4211 EXPECT_EQ(initial_window_size - kMsgDataSize, 4059 EXPECT_EQ(initial_window_size - kMsgDataSize,
4212 session_->session_send_window_size_); 4060 session_->session_send_window_size_);
4213 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 4061 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
4813 4661
4814 TEST_P(SpdySessionTest, SplitHeaders) { 4662 TEST_P(SpdySessionTest, SplitHeaders) {
4815 GURL kStreamUrl("https://www.example.org/foo.dat"); 4663 GURL kStreamUrl("https://www.example.org/foo.dat");
4816 SpdyHeaderBlock headers; 4664 SpdyHeaderBlock headers;
4817 spdy_util_.AddUrlToHeaderBlock(kStreamUrl.spec(), &headers); 4665 spdy_util_.AddUrlToHeaderBlock(kStreamUrl.spec(), &headers);
4818 headers["alpha"] = "beta"; 4666 headers["alpha"] = "beta";
4819 4667
4820 SpdyHeaderBlock request_headers; 4668 SpdyHeaderBlock request_headers;
4821 SpdyHeaderBlock response_headers; 4669 SpdyHeaderBlock response_headers;
4822 4670
4823 SplitPushedHeadersToRequestAndResponse( 4671 SplitPushedHeadersToRequestAndResponse(headers, HTTP2, &request_headers,
4824 headers, spdy_util_.spdy_version(), &request_headers, &response_headers); 4672 &response_headers);
4825 4673
4826 SpdyHeaderBlock::const_iterator it = response_headers.find("alpha"); 4674 SpdyHeaderBlock::const_iterator it = response_headers.find("alpha");
4827 std::string alpha_val = 4675 std::string alpha_val =
4828 (it == response_headers.end()) ? std::string() : it->second.as_string(); 4676 (it == response_headers.end()) ? std::string() : it->second.as_string();
4829 EXPECT_EQ("beta", alpha_val); 4677 EXPECT_EQ("beta", alpha_val);
4830 4678
4831 GURL request_url = 4679 GURL request_url = GetUrlFromHeaderBlock(request_headers, HTTP2);
4832 GetUrlFromHeaderBlock(request_headers, spdy_util_.spdy_version());
4833 EXPECT_EQ(kStreamUrl, request_url); 4680 EXPECT_EQ(kStreamUrl, request_url);
4834 } 4681 }
4835 4682
4836 // Regression. Sorta. Push streams and client streams were sharing a single 4683 // Regression. Sorta. Push streams and client streams were sharing a single
4837 // limit for a long time. 4684 // limit for a long time.
4838 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) { 4685 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
4839 SettingsMap new_settings; 4686 SettingsMap new_settings;
4840 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 4687 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
4841 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); 4688 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2);
4842 std::unique_ptr<SpdySerializedFrame> settings_frame( 4689 std::unique_ptr<SpdySerializedFrame> settings_frame(
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
5173 EXPECT_EQ(0u, session_->num_pushed_streams()); 5020 EXPECT_EQ(0u, session_->num_pushed_streams());
5174 EXPECT_EQ(0u, session_->num_active_pushed_streams()); 5021 EXPECT_EQ(0u, session_->num_active_pushed_streams());
5175 5022
5176 // Read EOF. 5023 // Read EOF.
5177 data.Resume(); 5024 data.Resume();
5178 base::RunLoop().RunUntilIdle(); 5025 base::RunLoop().RunUntilIdle();
5179 EXPECT_FALSE(session_); 5026 EXPECT_FALSE(session_);
5180 } 5027 }
5181 5028
5182 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) { 5029 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
5183 // Streams in reserved remote state exist only in HTTP/2.
5184 if (spdy_util_.spdy_version() < HTTP2)
5185 return;
5186
5187 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( 5030 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush(
5188 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 5031 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
5189 SpdyHeaderBlock push_headers; 5032 SpdyHeaderBlock push_headers;
5190 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", 5033 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat",
5191 &push_headers); 5034 &push_headers);
5192 std::unique_ptr<SpdySerializedFrame> push_b( 5035 std::unique_ptr<SpdySerializedFrame> push_b(
5193 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); 5036 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1));
5194 std::unique_ptr<SpdySerializedFrame> headers_b( 5037 std::unique_ptr<SpdySerializedFrame> headers_b(
5195 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); 5038 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0));
5196 MockRead reads[] = { 5039 MockRead reads[] = {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
5270 EXPECT_EQ(1u, session_->num_pushed_streams()); 5113 EXPECT_EQ(1u, session_->num_pushed_streams());
5271 EXPECT_EQ(1u, session_->num_active_pushed_streams()); 5114 EXPECT_EQ(1u, session_->num_active_pushed_streams());
5272 5115
5273 // Read EOF. 5116 // Read EOF.
5274 data.Resume(); 5117 data.Resume();
5275 base::RunLoop().RunUntilIdle(); 5118 base::RunLoop().RunUntilIdle();
5276 EXPECT_FALSE(session_); 5119 EXPECT_FALSE(session_);
5277 } 5120 }
5278 5121
5279 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { 5122 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
5280 // Streams in reserved remote state exist only in HTTP/2.
5281 if (spdy_util_.spdy_version() < HTTP2)
5282 return;
5283
5284 const char kPushedUrl[] = "https://www.example.org/a.dat"; 5123 const char kPushedUrl[] = "https://www.example.org/a.dat";
5285 SpdyHeaderBlock push_headers; 5124 SpdyHeaderBlock push_headers;
5286 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); 5125 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers);
5287 std::unique_ptr<SpdySerializedFrame> push_promise( 5126 std::unique_ptr<SpdySerializedFrame> push_promise(
5288 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); 5127 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1));
5289 std::unique_ptr<SpdySerializedFrame> headers_frame( 5128 std::unique_ptr<SpdySerializedFrame> headers_frame(
5290 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); 5129 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
5291 MockRead reads[] = { 5130 MockRead reads[] = {
5292 MockRead(ASYNC, ERR_IO_PENDING, 1), 5131 MockRead(ASYNC, ERR_IO_PENDING, 1),
5293 CreateMockRead(*push_promise, 2), 5132 CreateMockRead(*push_promise, 2),
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
5434 private: 5273 private:
5435 SpdySerializedFrame altsvc_frame_; 5274 SpdySerializedFrame altsvc_frame_;
5436 std::vector<MockRead> reads_; 5275 std::vector<MockRead> reads_;
5437 std::unique_ptr<SequencedSocketData> data_; 5276 std::unique_ptr<SequencedSocketData> data_;
5438 scoped_refptr<X509Certificate> cert_; 5277 scoped_refptr<X509Certificate> cert_;
5439 SSLSocketDataProvider ssl_; 5278 SSLSocketDataProvider ssl_;
5440 }; 5279 };
5441 5280
5442 INSTANTIATE_TEST_CASE_P(HTTP2, 5281 INSTANTIATE_TEST_CASE_P(HTTP2,
5443 AltSvcFrameTest, 5282 AltSvcFrameTest,
5444 testing::Values(kTestCaseHTTP2PriorityDependencies)); 5283 testing::Values(kTestCasePriorityDependencies));
5445 5284
5446 TEST_P(AltSvcFrameTest, ProcessAltSvcFrame) { 5285 TEST_P(AltSvcFrameTest, ProcessAltSvcFrame) {
5447 const char origin[] = "https://mail.example.org"; 5286 const char origin[] = "https://mail.example.org";
5448 SpdyAltSvcIR altsvc_ir(0); 5287 SpdyAltSvcIR altsvc_ir(0);
5449 altsvc_ir.add_altsvc(alternative_service_); 5288 altsvc_ir.add_altsvc(alternative_service_);
5450 altsvc_ir.set_origin(origin); 5289 altsvc_ir.set_origin(origin);
5451 AddSocketData(altsvc_ir); 5290 AddSocketData(altsvc_ir);
5452 AddSSLSocketData(); 5291 AddSSLSocketData();
5453 5292
5454 CreateNetworkSession(); 5293 CreateNetworkSession();
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
5900 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5739 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5901 "spdy_pooling.pem"); 5740 "spdy_pooling.pem");
5902 ssl_info.is_issued_by_known_root = true; 5741 ssl_info.is_issued_by_known_root = true;
5903 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5742 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5904 5743
5905 EXPECT_TRUE(SpdySession::CanPool( 5744 EXPECT_TRUE(SpdySession::CanPool(
5906 &tss, ssl_info, "www.example.org", "mail.example.org")); 5745 &tss, ssl_info, "www.example.org", "mail.example.org"));
5907 } 5746 }
5908 5747
5909 } // namespace net 5748 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698