Chromium Code Reviews| Index: net/spdy/spdy_session_unittest.cc |
| diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc |
| index f0ab24a79ea2cbc7057f11a73599e7b9ff3f1a6c..1eddbe48c481d392335c037925b55d1634530753 100644 |
| --- a/net/spdy/spdy_session_unittest.cc |
| +++ b/net/spdy/spdy_session_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "base/callback.h" |
| #include "base/run_loop.h" |
| #include "base/test/histogram_tester.h" |
| +#include "base/test/scoped_feature_list.h" |
| #include "net/base/host_port_pair.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/ip_endpoint.h" |
| @@ -5426,6 +5427,79 @@ TEST_F(SpdySessionTest, RejectInvalidUnknownFrames) { |
| EXPECT_FALSE(session_->OnUnknownFrame(8, 0)); |
| } |
| +enum ReadIfReadySupport { |
| + // ReadIfReady() field trial is enabled, but ReadyIfReady() is unimplemented. |
|
Bence
2017/03/03 16:33:42
SUPPORTED is implemented and NOT_SUPPORTED is unim
xunjieli
2017/03/03 19:41:07
Done.
|
| + READ_IF_READY_ENABLED_SUPPORTED, |
| + // ReadIfReady() field trial is enabled, and ReadyIfReady() is implemented. |
| + READ_IF_READY_ENABLED_NOT_SUPPORTED, |
| + // ReadIfReady() field trial is disabled. |
| + READ_IF_READY_DISABLED, |
| +}; |
| + |
| +class SpdySessionReadyIfReadyTest |
|
Bence
2017/03/03 16:33:42
s/SpdySessionReadyIfReadyTest/SpdySessionReadIfRea
xunjieli
2017/03/03 19:41:07
Done. Oops.
|
| + : public SpdySessionTest, |
| + public testing::WithParamInterface<ReadIfReadySupport> { |
| + public: |
| + void SetUp() override { |
| + if (GetParam() != READ_IF_READY_DISABLED) |
| + scoped_feature_list_.InitAndEnableFeature(Socket::kReadIfReadyExperiment); |
| + if (GetParam() == READ_IF_READY_ENABLED_SUPPORTED) |
| + session_deps_.socket_factory->set_enable_read_if_ready(true); |
| + SpdySessionTest::SetUp(); |
| + } |
| + |
| + private: |
| + base::test::ScopedFeatureList scoped_feature_list_; |
| +}; |
| + |
| +INSTANTIATE_TEST_CASE_P(/* no prefix */, |
| + SpdySessionReadyIfReadyTest, |
| + testing::Values(READ_IF_READY_ENABLED_SUPPORTED, |
| + READ_IF_READY_ENABLED_NOT_SUPPORTED, |
| + READ_IF_READY_DISABLED)); |
| + |
| +// Tests basic functionality of ReadIfReady() when it is enabled or disabled. |
| +TEST_P(SpdySessionReadyIfReadyTest, ReadIfReady) { |
| + SpdySerializedFrame req( |
| + spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true)); |
| + MockWrite writes[] = { |
| + CreateMockWrite(req, 0), |
| + }; |
| + |
| + SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| + SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| + MockRead reads[] = { |
| + CreateMockRead(resp, 1), CreateMockRead(body, 2), |
| + MockRead(ASYNC, 0, 3) // EOF |
| + }; |
| + |
| + session_deps_.host_resolver->set_synchronous_mode(true); |
| + |
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| + session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + |
| + AddSSLSocketData(); |
| + |
| + CreateNetworkSession(); |
| + CreateSecureSpdySession(); |
| + |
| + base::WeakPtr<SpdyStream> spdy_stream = |
| + CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| + test_url_, HIGHEST, NetLogWithSource()); |
| + ASSERT_TRUE(spdy_stream); |
| + EXPECT_EQ(0u, spdy_stream->stream_id()); |
| + test::StreamDelegateDoNothing delegate(spdy_stream); |
| + spdy_stream->SetDelegate(&delegate); |
| + |
| + SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| + spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| + |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + EXPECT_FALSE(spdy_stream); |
| + EXPECT_EQ(1u, delegate.stream_id()); |
| +} |
| + |
| class SendInitialSettingsOnNewSpdySessionTest : public SpdySessionTest { |
| protected: |
| void RunInitialSettingsTest(const SettingsMap expected_settings) { |