diff options
author | simonjam@chromium.org <simonjam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-19 20:14:29 +0000 |
---|---|---|
committer | simonjam@chromium.org <simonjam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-19 20:14:29 +0000 |
commit | 5a60c8bb002e4573dd0809f4a78d56b4c9720add (patch) | |
tree | 4be91c33213b0e7ab66dfed7ced978e8a16b3cdc /net/http/http_network_transaction_unittest.cc | |
parent | 8053408224c37ade07452972e01de6126d074d27 (diff) | |
download | chromium_src-5a60c8bb002e4573dd0809f4a78d56b4c9720add.zip chromium_src-5a60c8bb002e4573dd0809f4a78d56b4c9720add.tar.gz chromium_src-5a60c8bb002e4573dd0809f4a78d56b4c9720add.tar.bz2 |
Basic HTTP pipelining support.
This must be enabled in about:flags. It is naive and assumes all servers correctly implement pipelining. Proxies are not supported.
Immediate future work:
- Integration tests.
- Additional NetLog logging.
- Refactor HttpPipelinedConnectionImpl.
Long term:
- Detect broken transparent proxies.
- Detect and/or mitigate broken servers.
- Buffer HttpPipelinedStream.
- Optimize number of pipelines and their depth.
- Support proxies.
BUG=8991
TEST=net_unittests
Review URL: http://codereview.chromium.org/7289006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106364 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_network_transaction_unittest.cc')
-rw-r--r-- | net/http/http_network_transaction_unittest.cc | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 1de21e7..546935e 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -174,8 +174,8 @@ class HttpNetworkTransactionTest : public PlatformTest { void KeepAliveConnectionResendRequestTest(const MockRead& read_failure); - SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], - size_t reads_count) { + SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], + size_t data_count) { SimpleGetHelperResult out; HttpRequestInfo request; @@ -187,8 +187,9 @@ class HttpNetworkTransactionTest : public PlatformTest { scoped_ptr<HttpTransaction> trans( new HttpNetworkTransaction(CreateSession(&session_deps))); - StaticSocketDataProvider data(data_reads, reads_count, NULL, 0); - session_deps.socket_factory.AddSocketDataProvider(&data); + for (size_t i = 0; i < data_count; ++i) { + session_deps.socket_factory.AddSocketDataProvider(data[i]); + } TestOldCompletionCallback callback; @@ -237,6 +238,13 @@ class HttpNetworkTransactionTest : public PlatformTest { return out; } + SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], + size_t reads_count) { + StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); + StaticSocketDataProvider* data[] = { &reads }; + return SimpleGetHelperForData(data, 1); + } + void ConnectStatusHelperWithExpectedStatus(const MockRead& status, int expected_status); @@ -9245,4 +9253,51 @@ TEST_F(HttpNetworkTransactionTest, HttpStreamFactory::set_use_alternate_protocols(false); } +TEST_F(HttpNetworkTransactionTest, ReadPipelineEvictionFallback) { + MockRead data_reads1[] = { + MockRead(false, ERR_PIPELINE_EVICTION), + }; + MockRead data_reads2[] = { + MockRead("HTTP/1.0 200 OK\r\n\r\n"), + MockRead("hello world"), + MockRead(false, OK), + }; + StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); + StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); + StaticSocketDataProvider* data[] = { &data1, &data2 }; + + SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); + + EXPECT_EQ(OK, out.rv); + EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); + EXPECT_EQ("hello world", out.response_data); +} + +TEST_F(HttpNetworkTransactionTest, SendPipelineEvictionFallback) { + MockWrite data_writes1[] = { + MockWrite(false, ERR_PIPELINE_EVICTION), + }; + MockWrite data_writes2[] = { + MockWrite("GET / HTTP/1.1\r\n" + "Host: www.google.com\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + MockRead data_reads2[] = { + MockRead("HTTP/1.0 200 OK\r\n\r\n"), + MockRead("hello world"), + MockRead(false, OK), + }; + StaticSocketDataProvider data1(NULL, 0, + data_writes1, arraysize(data_writes1)); + StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), + data_writes2, arraysize(data_writes2)); + StaticSocketDataProvider* data[] = { &data1, &data2 }; + + SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); + + EXPECT_EQ(OK, out.rv); + EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); + EXPECT_EQ("hello world", out.response_data); +} + } // namespace net |