OLD | NEW |
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 "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 void StallSessionStream(SpdyStream* stream) { | 83 void StallSessionStream(SpdyStream* stream) { |
84 StallSessionSend(); | 84 StallSessionSend(); |
85 StallStreamSend(stream); | 85 StallStreamSend(stream); |
86 } | 86 } |
87 | 87 |
88 void StallStreamSession(SpdyStream* stream) { | 88 void StallStreamSession(SpdyStream* stream) { |
89 StallStreamSend(stream); | 89 StallStreamSend(stream); |
90 StallSessionSend(); | 90 StallSessionSend(); |
91 } | 91 } |
92 | 92 |
93 void UnstallSessionOnly(SpdyStream* stream, int32 delta_window_size) { | 93 void UnstallSessionOnly(SpdyStream* stream, int32_t delta_window_size) { |
94 UnstallSessionSend(delta_window_size); | 94 UnstallSessionSend(delta_window_size); |
95 } | 95 } |
96 | 96 |
97 void UnstallStreamOnly(SpdyStream* stream, int32 delta_window_size) { | 97 void UnstallStreamOnly(SpdyStream* stream, int32_t delta_window_size) { |
98 UnstallStreamSend(stream, delta_window_size); | 98 UnstallStreamSend(stream, delta_window_size); |
99 } | 99 } |
100 | 100 |
101 void UnstallSessionStream(SpdyStream* stream, int32 delta_window_size) { | 101 void UnstallSessionStream(SpdyStream* stream, int32_t delta_window_size) { |
102 UnstallSessionSend(delta_window_size); | 102 UnstallSessionSend(delta_window_size); |
103 UnstallStreamSend(stream, delta_window_size); | 103 UnstallStreamSend(stream, delta_window_size); |
104 } | 104 } |
105 | 105 |
106 void UnstallStreamSession(SpdyStream* stream, int32 delta_window_size) { | 106 void UnstallStreamSession(SpdyStream* stream, int32_t delta_window_size) { |
107 UnstallStreamSend(stream, delta_window_size); | 107 UnstallStreamSend(stream, delta_window_size); |
108 UnstallSessionSend(delta_window_size); | 108 UnstallSessionSend(delta_window_size); |
109 } | 109 } |
110 | 110 |
111 protected: | 111 protected: |
112 NextProto GetProtocol() const { | 112 NextProto GetProtocol() const { |
113 return GetParam() == kTestCaseSPDY31 ? kProtoSPDY31 : kProtoHTTP2; | 113 return GetParam() == kTestCaseSPDY31 ? kProtoSPDY31 : kProtoHTTP2; |
114 } | 114 } |
115 | 115 |
116 bool GetDependenciesFromPriority() const { | 116 bool GetDependenciesFromPriority() const { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 } | 165 } |
166 | 166 |
167 void StallSessionSend() { | 167 void StallSessionSend() { |
168 // Reduce the send window size to 0 to stall. | 168 // Reduce the send window size to 0 to stall. |
169 while (session_->session_send_window_size_ > 0) { | 169 while (session_->session_send_window_size_ > 0) { |
170 session_->DecreaseSendWindowSize(std::min( | 170 session_->DecreaseSendWindowSize(std::min( |
171 kMaxSpdyFrameChunkSize, session_->session_send_window_size_)); | 171 kMaxSpdyFrameChunkSize, session_->session_send_window_size_)); |
172 } | 172 } |
173 } | 173 } |
174 | 174 |
175 void UnstallSessionSend(int32 delta_window_size) { | 175 void UnstallSessionSend(int32_t delta_window_size) { |
176 session_->IncreaseSendWindowSize(delta_window_size); | 176 session_->IncreaseSendWindowSize(delta_window_size); |
177 } | 177 } |
178 | 178 |
179 void StallStreamSend(SpdyStream* stream) { | 179 void StallStreamSend(SpdyStream* stream) { |
180 // Reduce the send window size to 0 to stall. | 180 // Reduce the send window size to 0 to stall. |
181 while (stream->send_window_size() > 0) { | 181 while (stream->send_window_size() > 0) { |
182 stream->DecreaseSendWindowSize( | 182 stream->DecreaseSendWindowSize( |
183 std::min(kMaxSpdyFrameChunkSize, stream->send_window_size())); | 183 std::min(kMaxSpdyFrameChunkSize, stream->send_window_size())); |
184 } | 184 } |
185 } | 185 } |
186 | 186 |
187 void UnstallStreamSend(SpdyStream* stream, int32 delta_window_size) { | 187 void UnstallStreamSend(SpdyStream* stream, int32_t delta_window_size) { |
188 stream->IncreaseSendWindowSize(delta_window_size); | 188 stream->IncreaseSendWindowSize(delta_window_size); |
189 } | 189 } |
190 | 190 |
191 void RunResumeAfterUnstallTest( | 191 void RunResumeAfterUnstallTest( |
192 const base::Callback<void(SpdyStream*)>& stall_function, | 192 const base::Callback<void(SpdyStream*)>& stall_function, |
193 const base::Callback<void(SpdyStream*, int32)>& unstall_function); | 193 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function); |
194 | 194 |
195 // Original socket limits. Some tests set these. Safest to always restore | 195 // Original socket limits. Some tests set these. Safest to always restore |
196 // them once each test has been run. | 196 // them once each test has been run. |
197 int old_max_group_sockets_; | 197 int old_max_group_sockets_; |
198 int old_max_pool_sockets_; | 198 int old_max_pool_sockets_; |
199 | 199 |
200 SpdyTestUtil spdy_util_; | 200 SpdyTestUtil spdy_util_; |
201 SpdySessionDependencies session_deps_; | 201 SpdySessionDependencies session_deps_; |
202 scoped_ptr<HttpNetworkSession> http_session_; | 202 scoped_ptr<HttpNetworkSession> http_session_; |
203 base::WeakPtr<SpdySession> session_; | 203 base::WeakPtr<SpdySession> session_; |
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1339 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS; | 1339 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS; |
1340 | 1340 |
1341 int seq = 0; | 1341 int seq = 0; |
1342 std::vector<MockWrite> writes; | 1342 std::vector<MockWrite> writes; |
1343 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); | 1343 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); |
1344 if (GetProtocol() == kProtoHTTP2) { | 1344 if (GetProtocol() == kProtoHTTP2) { |
1345 writes.push_back(CreateMockWrite(*settings_ack, ++seq)); | 1345 writes.push_back(CreateMockWrite(*settings_ack, ++seq)); |
1346 } | 1346 } |
1347 | 1347 |
1348 SettingsMap new_settings; | 1348 SettingsMap new_settings; |
1349 const uint32 max_concurrent_streams = kInitialMaxConcurrentStreams + 1; | 1349 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1; |
1350 new_settings[kSpdySettingsIds] = | 1350 new_settings[kSpdySettingsIds] = |
1351 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); | 1351 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); |
1352 scoped_ptr<SpdyFrame> settings_frame( | 1352 scoped_ptr<SpdyFrame> settings_frame( |
1353 spdy_util_.ConstructSpdySettings(new_settings)); | 1353 spdy_util_.ConstructSpdySettings(new_settings)); |
1354 MockRead reads[] = { | 1354 MockRead reads[] = { |
1355 CreateMockRead(*settings_frame, 0), | 1355 CreateMockRead(*settings_frame, 0), |
1356 MockRead(ASYNC, ERR_IO_PENDING, ++seq), | 1356 MockRead(ASYNC, ERR_IO_PENDING, ++seq), |
1357 MockRead(ASYNC, 0, ++seq), | 1357 MockRead(ASYNC, 0, ++seq), |
1358 }; | 1358 }; |
1359 | 1359 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 // correct. | 1396 // correct. |
1397 TEST_P(SpdySessionTest, ClearSettings) { | 1397 TEST_P(SpdySessionTest, ClearSettings) { |
1398 if (spdy_util_.spdy_version() >= HTTP2) { | 1398 if (spdy_util_.spdy_version() >= HTTP2) { |
1399 // HTTP/2 doesn't include settings persistence, or a CLEAR_SETTINGS flag. | 1399 // HTTP/2 doesn't include settings persistence, or a CLEAR_SETTINGS flag. |
1400 // Flag 0x1, CLEAR_SETTINGS in SPDY3, is instead settings ACK in HTTP/2. | 1400 // Flag 0x1, CLEAR_SETTINGS in SPDY3, is instead settings ACK in HTTP/2. |
1401 return; | 1401 return; |
1402 } | 1402 } |
1403 session_deps_.host_resolver->set_synchronous_mode(true); | 1403 session_deps_.host_resolver->set_synchronous_mode(true); |
1404 | 1404 |
1405 SettingsMap new_settings; | 1405 SettingsMap new_settings; |
1406 const uint32 max_concurrent_streams = kInitialMaxConcurrentStreams + 1; | 1406 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1; |
1407 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = | 1407 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
1408 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); | 1408 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); |
1409 scoped_ptr<SpdyFrame> settings_frame( | 1409 scoped_ptr<SpdyFrame> settings_frame( |
1410 spdy_util_.ConstructSpdySettings(new_settings)); | 1410 spdy_util_.ConstructSpdySettings(new_settings)); |
1411 uint8 flags = SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS; | 1411 uint8_t flags = SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS; |
1412 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version()); | 1412 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version()); |
1413 MockRead reads[] = { | 1413 MockRead reads[] = { |
1414 CreateMockRead(*settings_frame, 0), | 1414 CreateMockRead(*settings_frame, 0), |
1415 MockRead(ASYNC, ERR_IO_PENDING, 1), | 1415 MockRead(ASYNC, ERR_IO_PENDING, 1), |
1416 MockRead(ASYNC, 0, 2), | 1416 MockRead(ASYNC, 0, 2), |
1417 }; | 1417 }; |
1418 | 1418 |
1419 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); | 1419 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); |
1420 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1420 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1421 | 1421 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 std::vector<MockWrite> writes; | 1540 std::vector<MockWrite> writes; |
1541 if (GetProtocol() == kProtoHTTP2) { | 1541 if (GetProtocol() == kProtoHTTP2) { |
1542 writes.push_back( | 1542 writes.push_back( |
1543 MockWrite(ASYNC, | 1543 MockWrite(ASYNC, |
1544 kHttp2ConnectionHeaderPrefix, | 1544 kHttp2ConnectionHeaderPrefix, |
1545 kHttp2ConnectionHeaderPrefixSize)); | 1545 kHttp2ConnectionHeaderPrefixSize)); |
1546 } | 1546 } |
1547 writes.push_back(CreateMockWrite(*settings_frame)); | 1547 writes.push_back(CreateMockWrite(*settings_frame)); |
1548 | 1548 |
1549 SettingsMap server_settings; | 1549 SettingsMap server_settings; |
1550 const uint32 initial_max_concurrent_streams = 1; | 1550 const uint32_t initial_max_concurrent_streams = 1; |
1551 server_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = | 1551 server_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
1552 SettingsFlagsAndValue(SETTINGS_FLAG_PERSISTED, | 1552 SettingsFlagsAndValue(SETTINGS_FLAG_PERSISTED, |
1553 initial_max_concurrent_streams); | 1553 initial_max_concurrent_streams); |
1554 scoped_ptr<SpdyFrame> server_settings_frame( | 1554 scoped_ptr<SpdyFrame> server_settings_frame( |
1555 spdy_util_.ConstructSpdySettings(server_settings)); | 1555 spdy_util_.ConstructSpdySettings(server_settings)); |
1556 if (GetProtocol() <= kProtoSPDY31) { | 1556 if (GetProtocol() <= kProtoSPDY31) { |
1557 writes.push_back(CreateMockWrite(*server_settings_frame)); | 1557 writes.push_back(CreateMockWrite(*server_settings_frame)); |
1558 } | 1558 } |
1559 | 1559 |
1560 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(), | 1560 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(), |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2328 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.org")); | 2328 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.org")); |
2329 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.example.com")); | 2329 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.example.com")); |
2330 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.google.com")); | 2330 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.google.com")); |
2331 } | 2331 } |
2332 | 2332 |
2333 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) { | 2333 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) { |
2334 // TODO(rtenneti): Define a helper class/methods and move the common code in | 2334 // TODO(rtenneti): Define a helper class/methods and move the common code in |
2335 // this file. | 2335 // this file. |
2336 SettingsMap new_settings; | 2336 SettingsMap new_settings; |
2337 const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS; | 2337 const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS; |
2338 const uint32 max_concurrent_streams = 1; | 2338 const uint32_t max_concurrent_streams = 1; |
2339 new_settings[kSpdySettingsIds1] = | 2339 new_settings[kSpdySettingsIds1] = |
2340 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); | 2340 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); |
2341 | 2341 |
2342 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); | 2342 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); |
2343 scoped_ptr<SpdyFrame> req1( | 2343 scoped_ptr<SpdyFrame> req1( |
2344 spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true)); | 2344 spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true)); |
2345 spdy_util_.UpdateWithStreamDestruction(1); | 2345 spdy_util_.UpdateWithStreamDestruction(1); |
2346 scoped_ptr<SpdyFrame> req2( | 2346 scoped_ptr<SpdyFrame> req2( |
2347 spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, LOWEST, true)); | 2347 spdy_util_.ConstructSpdyGet(nullptr, 0, false, 3, LOWEST, true)); |
2348 spdy_util_.UpdateWithStreamDestruction(3); | 2348 spdy_util_.UpdateWithStreamDestruction(3); |
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3381 | 3381 |
3382 data.Resume(); | 3382 data.Resume(); |
3383 base::RunLoop().RunUntilIdle(); | 3383 base::RunLoop().RunUntilIdle(); |
3384 EXPECT_FALSE(session_); | 3384 EXPECT_FALSE(session_); |
3385 } | 3385 } |
3386 | 3386 |
3387 TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) { | 3387 TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) { |
3388 // Set SETTINGS_INITIAL_WINDOW_SIZE to a small number so that WINDOW_UPDATE | 3388 // Set SETTINGS_INITIAL_WINDOW_SIZE to a small number so that WINDOW_UPDATE |
3389 // gets sent. | 3389 // gets sent. |
3390 SettingsMap new_settings; | 3390 SettingsMap new_settings; |
3391 int32 window_size = 1; | 3391 int32_t window_size = 1; |
3392 new_settings[SETTINGS_INITIAL_WINDOW_SIZE] = | 3392 new_settings[SETTINGS_INITIAL_WINDOW_SIZE] = |
3393 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, window_size); | 3393 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, window_size); |
3394 | 3394 |
3395 // Set up the socket so we read a SETTINGS frame that sets | 3395 // Set up the socket so we read a SETTINGS frame that sets |
3396 // INITIAL_WINDOW_SIZE. | 3396 // INITIAL_WINDOW_SIZE. |
3397 scoped_ptr<SpdyFrame> settings_frame( | 3397 scoped_ptr<SpdyFrame> settings_frame( |
3398 spdy_util_.ConstructSpdySettings(new_settings)); | 3398 spdy_util_.ConstructSpdySettings(new_settings)); |
3399 MockRead reads[] = { | 3399 MockRead reads[] = { |
3400 CreateMockRead(*settings_frame, 0), | 3400 CreateMockRead(*settings_frame, 0), |
3401 MockRead(ASYNC, ERR_IO_PENDING, 1), | 3401 MockRead(ASYNC, ERR_IO_PENDING, 1), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3442 EXPECT_FALSE(session_); | 3442 EXPECT_FALSE(session_); |
3443 } | 3443 } |
3444 | 3444 |
3445 // SpdySession::{Increase,Decrease}RecvWindowSize should properly | 3445 // SpdySession::{Increase,Decrease}RecvWindowSize should properly |
3446 // adjust the session receive window size. In addition, | 3446 // adjust the session receive window size. In addition, |
3447 // SpdySession::IncreaseRecvWindowSize should trigger | 3447 // SpdySession::IncreaseRecvWindowSize should trigger |
3448 // sending a WINDOW_UPDATE frame for a large enough delta. | 3448 // sending a WINDOW_UPDATE frame for a large enough delta. |
3449 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { | 3449 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { |
3450 session_deps_.host_resolver->set_synchronous_mode(true); | 3450 session_deps_.host_resolver->set_synchronous_mode(true); |
3451 | 3451 |
3452 const int32 initial_window_size = | 3452 const int32_t initial_window_size = |
3453 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 3453 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
3454 const int32 delta_window_size = 100; | 3454 const int32_t delta_window_size = 100; |
3455 | 3455 |
3456 MockRead reads[] = { | 3456 MockRead reads[] = { |
3457 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF | 3457 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF |
3458 }; | 3458 }; |
3459 scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate( | 3459 scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate( |
3460 kSessionFlowControlStreamId, initial_window_size + delta_window_size)); | 3460 kSessionFlowControlStreamId, initial_window_size + delta_window_size)); |
3461 MockWrite writes[] = { | 3461 MockWrite writes[] = { |
3462 CreateMockWrite(*window_update, 0), | 3462 CreateMockWrite(*window_update, 0), |
3463 }; | 3463 }; |
3464 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3464 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3509 MockRead(SYNCHRONOUS, 0, 0) // EOF | 3509 MockRead(SYNCHRONOUS, 0, 0) // EOF |
3510 }; | 3510 }; |
3511 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); | 3511 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); |
3512 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3512 session_deps_.socket_factory->AddSocketDataProvider(&data); |
3513 | 3513 |
3514 CreateNetworkSession(); | 3514 CreateNetworkSession(); |
3515 session_ = CreateFakeSpdySession(spdy_session_pool_, key_); | 3515 session_ = CreateFakeSpdySession(spdy_session_pool_, key_); |
3516 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION, | 3516 EXPECT_EQ(SpdySession::FLOW_CONTROL_STREAM_AND_SESSION, |
3517 session_->flow_control_state()); | 3517 session_->flow_control_state()); |
3518 | 3518 |
3519 const int32 initial_window_size = | 3519 const int32_t initial_window_size = |
3520 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 3520 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
3521 const int32 delta_window_size = 100; | 3521 const int32_t delta_window_size = 100; |
3522 | 3522 |
3523 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 3523 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
3524 | 3524 |
3525 session_->IncreaseSendWindowSize(delta_window_size); | 3525 session_->IncreaseSendWindowSize(delta_window_size); |
3526 EXPECT_EQ(initial_window_size + delta_window_size, | 3526 EXPECT_EQ(initial_window_size + delta_window_size, |
3527 session_->session_send_window_size_); | 3527 session_->session_send_window_size_); |
3528 | 3528 |
3529 session_->DecreaseSendWindowSize(delta_window_size); | 3529 session_->DecreaseSendWindowSize(delta_window_size); |
3530 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 3530 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
3531 } | 3531 } |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3602 EXPECT_EQ(kUploadDataSize + padding_length, | 3602 EXPECT_EQ(kUploadDataSize + padding_length, |
3603 session_->session_unacked_recv_window_bytes_); | 3603 session_->session_unacked_recv_window_bytes_); |
3604 | 3604 |
3605 data.Resume(); | 3605 data.Resume(); |
3606 base::RunLoop().RunUntilIdle(); | 3606 base::RunLoop().RunUntilIdle(); |
3607 EXPECT_FALSE(session_); | 3607 EXPECT_FALSE(session_); |
3608 } | 3608 } |
3609 | 3609 |
3610 // Peer sends more data than stream level receiving flow control window. | 3610 // Peer sends more data than stream level receiving flow control window. |
3611 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) { | 3611 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) { |
3612 const int32 stream_max_recv_window_size = 1024; | 3612 const int32_t stream_max_recv_window_size = 1024; |
3613 const int32 data_frame_size = 2 * stream_max_recv_window_size; | 3613 const int32_t data_frame_size = 2 * stream_max_recv_window_size; |
3614 | 3614 |
3615 scoped_ptr<SpdyFrame> req( | 3615 scoped_ptr<SpdyFrame> req( |
3616 spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true)); | 3616 spdy_util_.ConstructSpdyGet(nullptr, 0, false, 1, LOWEST, true)); |
3617 scoped_ptr<SpdyFrame> rst( | 3617 scoped_ptr<SpdyFrame> rst( |
3618 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); | 3618 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); |
3619 MockWrite writes[] = { | 3619 MockWrite writes[] = { |
3620 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), | 3620 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), |
3621 }; | 3621 }; |
3622 | 3622 |
3623 scoped_ptr<SpdyFrame> resp( | 3623 scoped_ptr<SpdyFrame> resp( |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3666 EXPECT_TRUE(session_); | 3666 EXPECT_TRUE(session_); |
3667 data.Resume(); | 3667 data.Resume(); |
3668 base::RunLoop().RunUntilIdle(); | 3668 base::RunLoop().RunUntilIdle(); |
3669 EXPECT_FALSE(session_); | 3669 EXPECT_FALSE(session_); |
3670 } | 3670 } |
3671 | 3671 |
3672 // Regression test for a bug that was caused by including unsent WINDOW_UPDATE | 3672 // Regression test for a bug that was caused by including unsent WINDOW_UPDATE |
3673 // deltas in the receiving window size when checking incoming frames for flow | 3673 // deltas in the receiving window size when checking incoming frames for flow |
3674 // control errors at session level. | 3674 // control errors at session level. |
3675 TEST_P(SpdySessionTest, SessionFlowControlTooMuchDataTwoDataFrames) { | 3675 TEST_P(SpdySessionTest, SessionFlowControlTooMuchDataTwoDataFrames) { |
3676 const int32 session_max_recv_window_size = 500; | 3676 const int32_t session_max_recv_window_size = 500; |
3677 const int32 first_data_frame_size = 200; | 3677 const int32_t first_data_frame_size = 200; |
3678 const int32 second_data_frame_size = 400; | 3678 const int32_t second_data_frame_size = 400; |
3679 | 3679 |
3680 // First data frame should not trigger a WINDOW_UPDATE. | 3680 // First data frame should not trigger a WINDOW_UPDATE. |
3681 ASSERT_GT(session_max_recv_window_size / 2, first_data_frame_size); | 3681 ASSERT_GT(session_max_recv_window_size / 2, first_data_frame_size); |
3682 // Second data frame would be fine had there been a WINDOW_UPDATE. | 3682 // Second data frame would be fine had there been a WINDOW_UPDATE. |
3683 ASSERT_GT(session_max_recv_window_size, second_data_frame_size); | 3683 ASSERT_GT(session_max_recv_window_size, second_data_frame_size); |
3684 // But in fact, the two data frames together overflow the receiving window at | 3684 // But in fact, the two data frames together overflow the receiving window at |
3685 // session level. | 3685 // session level. |
3686 ASSERT_LT(session_max_recv_window_size, | 3686 ASSERT_LT(session_max_recv_window_size, |
3687 first_data_frame_size + second_data_frame_size); | 3687 first_data_frame_size + second_data_frame_size); |
3688 | 3688 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3730 // Second data frame overflows receiving window, causes session to close. | 3730 // Second data frame overflows receiving window, causes session to close. |
3731 data.Resume(); | 3731 data.Resume(); |
3732 base::RunLoop().RunUntilIdle(); | 3732 base::RunLoop().RunUntilIdle(); |
3733 EXPECT_EQ(SpdySession::STATE_DRAINING, session_->availability_state_); | 3733 EXPECT_EQ(SpdySession::STATE_DRAINING, session_->availability_state_); |
3734 } | 3734 } |
3735 | 3735 |
3736 // Regression test for a bug that was caused by including unsent WINDOW_UPDATE | 3736 // Regression test for a bug that was caused by including unsent WINDOW_UPDATE |
3737 // deltas in the receiving window size when checking incoming data frames for | 3737 // deltas in the receiving window size when checking incoming data frames for |
3738 // flow control errors at stream level. | 3738 // flow control errors at stream level. |
3739 TEST_P(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) { | 3739 TEST_P(SpdySessionTest, StreamFlowControlTooMuchDataTwoDataFrames) { |
3740 const int32 stream_max_recv_window_size = 500; | 3740 const int32_t stream_max_recv_window_size = 500; |
3741 const int32 first_data_frame_size = 200; | 3741 const int32_t first_data_frame_size = 200; |
3742 const int32 second_data_frame_size = 400; | 3742 const int32_t second_data_frame_size = 400; |
3743 | 3743 |
3744 // First data frame should not trigger a WINDOW_UPDATE. | 3744 // First data frame should not trigger a WINDOW_UPDATE. |
3745 ASSERT_GT(stream_max_recv_window_size / 2, first_data_frame_size); | 3745 ASSERT_GT(stream_max_recv_window_size / 2, first_data_frame_size); |
3746 // Second data frame would be fine had there been a WINDOW_UPDATE. | 3746 // Second data frame would be fine had there been a WINDOW_UPDATE. |
3747 ASSERT_GT(stream_max_recv_window_size, second_data_frame_size); | 3747 ASSERT_GT(stream_max_recv_window_size, second_data_frame_size); |
3748 // But in fact, they should overflow the receiving window at stream level. | 3748 // But in fact, they should overflow the receiving window at stream level. |
3749 ASSERT_LT(stream_max_recv_window_size, | 3749 ASSERT_LT(stream_max_recv_window_size, |
3750 first_data_frame_size + second_data_frame_size); | 3750 first_data_frame_size + second_data_frame_size); |
3751 | 3751 |
3752 scoped_ptr<SpdyFrame> req( | 3752 scoped_ptr<SpdyFrame> req( |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3834 ~DropReceivedDataDelegate() override {} | 3834 ~DropReceivedDataDelegate() override {} |
3835 | 3835 |
3836 // Drop any received data. | 3836 // Drop any received data. |
3837 void OnDataReceived(scoped_ptr<SpdyBuffer> buffer) override {} | 3837 void OnDataReceived(scoped_ptr<SpdyBuffer> buffer) override {} |
3838 }; | 3838 }; |
3839 | 3839 |
3840 // Send data back and forth but use a delegate that drops its received | 3840 // Send data back and forth but use a delegate that drops its received |
3841 // data. The receive window should still increase to its original | 3841 // data. The receive window should still increase to its original |
3842 // value, i.e. we shouldn't "leak" receive window bytes. | 3842 // value, i.e. we shouldn't "leak" receive window bytes. |
3843 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { | 3843 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { |
3844 const int32 kMsgDataSize = 100; | 3844 const int32_t kMsgDataSize = 100; |
3845 const std::string msg_data(kMsgDataSize, 'a'); | 3845 const std::string msg_data(kMsgDataSize, 'a'); |
3846 | 3846 |
3847 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 3847 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( |
3848 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 3848 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
3849 scoped_ptr<SpdyFrame> msg(spdy_util_.ConstructSpdyBodyFrame( | 3849 scoped_ptr<SpdyFrame> msg(spdy_util_.ConstructSpdyBodyFrame( |
3850 1, msg_data.data(), kMsgDataSize, false)); | 3850 1, msg_data.data(), kMsgDataSize, false)); |
3851 MockWrite writes[] = { | 3851 MockWrite writes[] = { |
3852 CreateMockWrite(*req, 0), | 3852 CreateMockWrite(*req, 0), |
3853 CreateMockWrite(*msg, 2), | 3853 CreateMockWrite(*msg, 2), |
3854 }; | 3854 }; |
(...skipping 26 matching lines...) Expand all Loading... |
3881 | 3881 |
3882 DropReceivedDataDelegate delegate(stream, msg_data); | 3882 DropReceivedDataDelegate delegate(stream, msg_data); |
3883 stream->SetDelegate(&delegate); | 3883 stream->SetDelegate(&delegate); |
3884 | 3884 |
3885 scoped_ptr<SpdyHeaderBlock> headers( | 3885 scoped_ptr<SpdyHeaderBlock> headers( |
3886 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize)); | 3886 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize)); |
3887 EXPECT_EQ(ERR_IO_PENDING, | 3887 EXPECT_EQ(ERR_IO_PENDING, |
3888 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); | 3888 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); |
3889 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 3889 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
3890 | 3890 |
3891 const int32 initial_window_size = | 3891 const int32_t initial_window_size = |
3892 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 3892 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
3893 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); | 3893 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); |
3894 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); | 3894 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); |
3895 | 3895 |
3896 base::RunLoop().RunUntilIdle(); | 3896 base::RunLoop().RunUntilIdle(); |
3897 | 3897 |
3898 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); | 3898 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); |
3899 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_); | 3899 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_); |
3900 | 3900 |
3901 stream->Close(); | 3901 stream->Close(); |
3902 EXPECT_FALSE(stream); | 3902 EXPECT_FALSE(stream); |
3903 | 3903 |
3904 EXPECT_EQ(OK, delegate.WaitForClose()); | 3904 EXPECT_EQ(OK, delegate.WaitForClose()); |
3905 | 3905 |
3906 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); | 3906 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); |
3907 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_); | 3907 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_); |
3908 | 3908 |
3909 data.Resume(); | 3909 data.Resume(); |
3910 base::RunLoop().RunUntilIdle(); | 3910 base::RunLoop().RunUntilIdle(); |
3911 EXPECT_FALSE(session_); | 3911 EXPECT_FALSE(session_); |
3912 } | 3912 } |
3913 | 3913 |
3914 // Send data back and forth but close the stream before its data frame | 3914 // Send data back and forth but close the stream before its data frame |
3915 // can be written to the socket. The send window should then increase | 3915 // can be written to the socket. The send window should then increase |
3916 // to its original value, i.e. we shouldn't "leak" send window bytes. | 3916 // to its original value, i.e. we shouldn't "leak" send window bytes. |
3917 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { | 3917 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { |
3918 const int32 kMsgDataSize = 100; | 3918 const int32_t kMsgDataSize = 100; |
3919 const std::string msg_data(kMsgDataSize, 'a'); | 3919 const std::string msg_data(kMsgDataSize, 'a'); |
3920 | 3920 |
3921 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 3921 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( |
3922 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 3922 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
3923 MockWrite writes[] = { | 3923 MockWrite writes[] = { |
3924 CreateMockWrite(*req, 0), | 3924 CreateMockWrite(*req, 0), |
3925 }; | 3925 }; |
3926 | 3926 |
3927 scoped_ptr<SpdyFrame> resp( | 3927 scoped_ptr<SpdyFrame> resp( |
3928 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 3928 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
(...skipping 18 matching lines...) Expand all Loading... |
3947 | 3947 |
3948 test::StreamDelegateSendImmediate delegate(stream, msg_data); | 3948 test::StreamDelegateSendImmediate delegate(stream, msg_data); |
3949 stream->SetDelegate(&delegate); | 3949 stream->SetDelegate(&delegate); |
3950 | 3950 |
3951 scoped_ptr<SpdyHeaderBlock> headers( | 3951 scoped_ptr<SpdyHeaderBlock> headers( |
3952 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize)); | 3952 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize)); |
3953 EXPECT_EQ(ERR_IO_PENDING, | 3953 EXPECT_EQ(ERR_IO_PENDING, |
3954 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); | 3954 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); |
3955 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 3955 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
3956 | 3956 |
3957 const int32 initial_window_size = | 3957 const int32_t initial_window_size = |
3958 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 3958 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
3959 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 3959 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
3960 | 3960 |
3961 // Write request. | 3961 // Write request. |
3962 base::RunLoop().RunUntilIdle(); | 3962 base::RunLoop().RunUntilIdle(); |
3963 | 3963 |
3964 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 3964 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
3965 | 3965 |
3966 // Read response, but do not run the message loop, so that the body is not | 3966 // Read response, but do not run the message loop, so that the body is not |
3967 // written to the socket. | 3967 // written to the socket. |
(...skipping 13 matching lines...) Expand all Loading... |
3981 base::RunLoop().RunUntilIdle(); | 3981 base::RunLoop().RunUntilIdle(); |
3982 EXPECT_FALSE(session_); | 3982 EXPECT_FALSE(session_); |
3983 | 3983 |
3984 EXPECT_TRUE(data.AllWriteDataConsumed()); | 3984 EXPECT_TRUE(data.AllWriteDataConsumed()); |
3985 EXPECT_TRUE(data.AllReadDataConsumed()); | 3985 EXPECT_TRUE(data.AllReadDataConsumed()); |
3986 } | 3986 } |
3987 | 3987 |
3988 // Send data back and forth; the send and receive windows should | 3988 // Send data back and forth; the send and receive windows should |
3989 // change appropriately. | 3989 // change appropriately. |
3990 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { | 3990 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { |
3991 const int32 kMsgDataSize = 100; | 3991 const int32_t kMsgDataSize = 100; |
3992 const std::string msg_data(kMsgDataSize, 'a'); | 3992 const std::string msg_data(kMsgDataSize, 'a'); |
3993 | 3993 |
3994 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 3994 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( |
3995 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 3995 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
3996 scoped_ptr<SpdyFrame> msg(spdy_util_.ConstructSpdyBodyFrame( | 3996 scoped_ptr<SpdyFrame> msg(spdy_util_.ConstructSpdyBodyFrame( |
3997 1, msg_data.data(), kMsgDataSize, false)); | 3997 1, msg_data.data(), kMsgDataSize, false)); |
3998 MockWrite writes[] = { | 3998 MockWrite writes[] = { |
3999 CreateMockWrite(*req, 0), | 3999 CreateMockWrite(*req, 0), |
4000 CreateMockWrite(*msg, 2), | 4000 CreateMockWrite(*msg, 2), |
4001 }; | 4001 }; |
(...skipping 29 matching lines...) Expand all Loading... |
4031 | 4031 |
4032 test::StreamDelegateSendImmediate delegate(stream, msg_data); | 4032 test::StreamDelegateSendImmediate delegate(stream, msg_data); |
4033 stream->SetDelegate(&delegate); | 4033 stream->SetDelegate(&delegate); |
4034 | 4034 |
4035 scoped_ptr<SpdyHeaderBlock> headers( | 4035 scoped_ptr<SpdyHeaderBlock> headers( |
4036 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize)); | 4036 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize)); |
4037 EXPECT_EQ(ERR_IO_PENDING, | 4037 EXPECT_EQ(ERR_IO_PENDING, |
4038 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); | 4038 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); |
4039 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 4039 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
4040 | 4040 |
4041 const int32 initial_window_size = | 4041 const int32_t initial_window_size = |
4042 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 4042 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
4043 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 4043 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
4044 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); | 4044 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); |
4045 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); | 4045 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); |
4046 | 4046 |
4047 // Send request and message. | 4047 // Send request and message. |
4048 base::RunLoop().RunUntilIdle(); | 4048 base::RunLoop().RunUntilIdle(); |
4049 | 4049 |
4050 EXPECT_EQ(initial_window_size - kMsgDataSize, | 4050 EXPECT_EQ(initial_window_size - kMsgDataSize, |
4051 session_->session_send_window_size_); | 4051 session_->session_send_window_size_); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4090 | 4090 |
4091 data.Resume(); | 4091 data.Resume(); |
4092 base::RunLoop().RunUntilIdle(); | 4092 base::RunLoop().RunUntilIdle(); |
4093 EXPECT_FALSE(session_); | 4093 EXPECT_FALSE(session_); |
4094 } | 4094 } |
4095 | 4095 |
4096 // Given a stall function and an unstall function, runs a test to make | 4096 // Given a stall function and an unstall function, runs a test to make |
4097 // sure that a stream resumes after unstall. | 4097 // sure that a stream resumes after unstall. |
4098 void SpdySessionTest::RunResumeAfterUnstallTest( | 4098 void SpdySessionTest::RunResumeAfterUnstallTest( |
4099 const base::Callback<void(SpdyStream*)>& stall_function, | 4099 const base::Callback<void(SpdyStream*)>& stall_function, |
4100 const base::Callback<void(SpdyStream*, int32)>& unstall_function) { | 4100 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) { |
4101 | |
4102 session_deps_.host_resolver->set_synchronous_mode(true); | 4101 session_deps_.host_resolver->set_synchronous_mode(true); |
4103 | 4102 |
4104 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 4103 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( |
4105 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); | 4104 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); |
4106 scoped_ptr<SpdyFrame> body( | 4105 scoped_ptr<SpdyFrame> body( |
4107 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); | 4106 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); |
4108 MockWrite writes[] = { | 4107 MockWrite writes[] = { |
4109 CreateMockWrite(*req, 0), | 4108 CreateMockWrite(*req, 0), |
4110 CreateMockWrite(*body, 1), | 4109 CreateMockWrite(*body, 1), |
4111 }; | 4110 }; |
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5176 "spdy_pooling.pem"); | 5175 "spdy_pooling.pem"); |
5177 ssl_info.channel_id_sent = true; | 5176 ssl_info.channel_id_sent = true; |
5178 | 5177 |
5179 EXPECT_TRUE(SpdySession::CanPool( | 5178 EXPECT_TRUE(SpdySession::CanPool( |
5180 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5179 &tss, ssl_info, "www.example.org", "mail.example.org")); |
5181 EXPECT_FALSE(SpdySession::CanPool( | 5180 EXPECT_FALSE(SpdySession::CanPool( |
5182 &tss, ssl_info, "www.example.org", "www.example.com")); | 5181 &tss, ssl_info, "www.example.org", "www.example.com")); |
5183 } | 5182 } |
5184 | 5183 |
5185 TEST(CanPoolTest, CanNotPoolWithBadPins) { | 5184 TEST(CanPoolTest, CanNotPoolWithBadPins) { |
5186 uint8 primary_pin = 1; | 5185 uint8_t primary_pin = 1; |
5187 uint8 backup_pin = 2; | 5186 uint8_t backup_pin = 2; |
5188 uint8 bad_pin = 3; | 5187 uint8_t bad_pin = 3; |
5189 TransportSecurityState tss; | 5188 TransportSecurityState tss; |
5190 test::AddPin(&tss, "mail.example.org", primary_pin, backup_pin); | 5189 test::AddPin(&tss, "mail.example.org", primary_pin, backup_pin); |
5191 | 5190 |
5192 SSLInfo ssl_info; | 5191 SSLInfo ssl_info; |
5193 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5192 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
5194 "spdy_pooling.pem"); | 5193 "spdy_pooling.pem"); |
5195 ssl_info.is_issued_by_known_root = true; | 5194 ssl_info.is_issued_by_known_root = true; |
5196 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(bad_pin)); | 5195 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(bad_pin)); |
5197 | 5196 |
5198 EXPECT_FALSE(SpdySession::CanPool( | 5197 EXPECT_FALSE(SpdySession::CanPool( |
5199 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5198 &tss, ssl_info, "www.example.org", "mail.example.org")); |
5200 } | 5199 } |
5201 | 5200 |
5202 TEST(CanPoolTest, CanPoolWithAcceptablePins) { | 5201 TEST(CanPoolTest, CanPoolWithAcceptablePins) { |
5203 uint8 primary_pin = 1; | 5202 uint8_t primary_pin = 1; |
5204 uint8 backup_pin = 2; | 5203 uint8_t backup_pin = 2; |
5205 TransportSecurityState tss; | 5204 TransportSecurityState tss; |
5206 test::AddPin(&tss, "mail.example.org", primary_pin, backup_pin); | 5205 test::AddPin(&tss, "mail.example.org", primary_pin, backup_pin); |
5207 | 5206 |
5208 SSLInfo ssl_info; | 5207 SSLInfo ssl_info; |
5209 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5208 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
5210 "spdy_pooling.pem"); | 5209 "spdy_pooling.pem"); |
5211 ssl_info.is_issued_by_known_root = true; | 5210 ssl_info.is_issued_by_known_root = true; |
5212 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 5211 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
5213 | 5212 |
5214 EXPECT_TRUE(SpdySession::CanPool( | 5213 EXPECT_TRUE(SpdySession::CanPool( |
5215 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5214 &tss, ssl_info, "www.example.org", "mail.example.org")); |
5216 } | 5215 } |
5217 | 5216 |
5218 } // namespace net | 5217 } // namespace net |
OLD | NEW |