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) { |