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 <algorithm> | 7 #include <algorithm> |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 5409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5420 // Client id exceeding watermark. | 5420 // Client id exceeding watermark. |
5421 EXPECT_FALSE(session_->OnUnknownFrame(9, 0)); | 5421 EXPECT_FALSE(session_->OnUnknownFrame(9, 0)); |
5422 | 5422 |
5423 session_->last_accepted_push_stream_id_ = 6; | 5423 session_->last_accepted_push_stream_id_ = 6; |
5424 // Low server (even) ids are fine. | 5424 // Low server (even) ids are fine. |
5425 EXPECT_TRUE(session_->OnUnknownFrame(2, 0)); | 5425 EXPECT_TRUE(session_->OnUnknownFrame(2, 0)); |
5426 // Server id exceeding last accepted id. | 5426 // Server id exceeding last accepted id. |
5427 EXPECT_FALSE(session_->OnUnknownFrame(8, 0)); | 5427 EXPECT_FALSE(session_->OnUnknownFrame(8, 0)); |
5428 } | 5428 } |
5429 | 5429 |
| 5430 enum ReadIfReadySupport { |
| 5431 // ReadIfReady() field trial is enabled, and ReadIfReady() is implemented. |
| 5432 READ_IF_READY_ENABLED_SUPPORTED, |
| 5433 // ReadIfReady() field trial is enabled, but ReadIfReady() is unimplemented. |
| 5434 READ_IF_READY_ENABLED_NOT_SUPPORTED, |
| 5435 // ReadIfReady() field trial is disabled. |
| 5436 READ_IF_READY_DISABLED, |
| 5437 }; |
| 5438 |
| 5439 class SpdySessionReadIfReadyTest |
| 5440 : public SpdySessionTest, |
| 5441 public testing::WithParamInterface<ReadIfReadySupport> { |
| 5442 public: |
| 5443 void SetUp() override { |
| 5444 if (GetParam() != READ_IF_READY_DISABLED) |
| 5445 scoped_feature_list_.InitAndEnableFeature(Socket::kReadIfReadyExperiment); |
| 5446 if (GetParam() == READ_IF_READY_ENABLED_SUPPORTED) |
| 5447 session_deps_.socket_factory->set_enable_read_if_ready(true); |
| 5448 SpdySessionTest::SetUp(); |
| 5449 } |
| 5450 |
| 5451 private: |
| 5452 base::test::ScopedFeatureList scoped_feature_list_; |
| 5453 }; |
| 5454 |
| 5455 INSTANTIATE_TEST_CASE_P(/* no prefix */, |
| 5456 SpdySessionReadIfReadyTest, |
| 5457 testing::Values(READ_IF_READY_ENABLED_SUPPORTED, |
| 5458 READ_IF_READY_ENABLED_NOT_SUPPORTED, |
| 5459 READ_IF_READY_DISABLED)); |
| 5460 |
| 5461 // Tests basic functionality of ReadIfReady() when it is enabled or disabled. |
| 5462 TEST_P(SpdySessionReadIfReadyTest, ReadIfReady) { |
| 5463 SpdySerializedFrame req( |
| 5464 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true)); |
| 5465 MockWrite writes[] = { |
| 5466 CreateMockWrite(req, 0), |
| 5467 }; |
| 5468 |
| 5469 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 5470 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 5471 MockRead reads[] = { |
| 5472 CreateMockRead(resp, 1), CreateMockRead(body, 2), |
| 5473 MockRead(ASYNC, 0, 3) // EOF |
| 5474 }; |
| 5475 |
| 5476 session_deps_.host_resolver->set_synchronous_mode(true); |
| 5477 |
| 5478 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 5479 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 5480 |
| 5481 AddSSLSocketData(); |
| 5482 |
| 5483 CreateNetworkSession(); |
| 5484 CreateSecureSpdySession(); |
| 5485 |
| 5486 base::WeakPtr<SpdyStream> spdy_stream = |
| 5487 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| 5488 test_url_, HIGHEST, NetLogWithSource()); |
| 5489 ASSERT_TRUE(spdy_stream); |
| 5490 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 5491 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 5492 spdy_stream->SetDelegate(&delegate); |
| 5493 |
| 5494 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 5495 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 5496 |
| 5497 base::RunLoop().RunUntilIdle(); |
| 5498 |
| 5499 EXPECT_FALSE(spdy_stream); |
| 5500 EXPECT_EQ(1u, delegate.stream_id()); |
| 5501 } |
| 5502 |
5430 class SendInitialSettingsOnNewSpdySessionTest : public SpdySessionTest { | 5503 class SendInitialSettingsOnNewSpdySessionTest : public SpdySessionTest { |
5431 protected: | 5504 protected: |
5432 void RunInitialSettingsTest(const SettingsMap expected_settings) { | 5505 void RunInitialSettingsTest(const SettingsMap expected_settings) { |
5433 session_deps_.host_resolver->set_synchronous_mode(true); | 5506 session_deps_.host_resolver->set_synchronous_mode(true); |
5434 | 5507 |
5435 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)}; | 5508 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)}; |
5436 | 5509 |
5437 SpdySerializedFrame settings_frame( | 5510 SpdySerializedFrame settings_frame( |
5438 spdy_util_.ConstructSpdySettings(expected_settings)); | 5511 spdy_util_.ConstructSpdySettings(expected_settings)); |
5439 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix, | 5512 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix, |
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6107 CreateSecureSpdySession(); | 6180 CreateSecureSpdySession(); |
6108 | 6181 |
6109 // If the experiment is enabled, the SpdySession will close idle sockets. | 6182 // If the experiment is enabled, the SpdySession will close idle sockets. |
6110 EXPECT_EQ( | 6183 EXPECT_EQ( |
6111 experiment_enabled_ ? 0 : kNumIdleSockets - 1, | 6184 experiment_enabled_ ? 0 : kNumIdleSockets - 1, |
6112 http_session_->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL) | 6185 http_session_->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL) |
6113 ->IdleSocketCount()); | 6186 ->IdleSocketCount()); |
6114 } | 6187 } |
6115 | 6188 |
6116 } // namespace net | 6189 } // namespace net |
OLD | NEW |