| Index: net/spdy/spdy_network_transaction_unittest.cc
|
| diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc
|
| index 84e19d642b79b23d7c31a7bf391421377e323ef5..94ef61d718c00f2f29126e28bd56002ca6042f35 100644
|
| --- a/net/spdy/spdy_network_transaction_unittest.cc
|
| +++ b/net/spdy/spdy_network_transaction_unittest.cc
|
| @@ -40,6 +40,7 @@ class SpdyNetworkTransactionTest
|
| EnableCompression(false);
|
| google_get_request_initialized_ = false;
|
| google_post_request_initialized_ = false;
|
| + google_chunked_post_request_initialized_ = false;
|
| }
|
|
|
| virtual void TearDown() {
|
| @@ -350,6 +351,21 @@ class SpdyNetworkTransactionTest
|
| return google_post_request_;
|
| }
|
|
|
| + const HttpRequestInfo& CreateChunkedPostRequest() {
|
| + if (!google_chunked_post_request_initialized_) {
|
| + google_chunked_post_request_.method = "POST";
|
| + google_chunked_post_request_.url = GURL(kDefaultURL);
|
| + google_chunked_post_request_.upload_data = new UploadData();
|
| + google_chunked_post_request_.upload_data->set_is_chunked(true);
|
| + google_chunked_post_request_.upload_data->AppendChunk(
|
| + kUploadData, kUploadDataSize, false);
|
| + google_chunked_post_request_.upload_data->AppendChunk(
|
| + kUploadData, kUploadDataSize, true);
|
| + google_chunked_post_request_initialized_ = true;
|
| + }
|
| + return google_chunked_post_request_;
|
| + }
|
| +
|
| // Read the result of a particular transaction, knowing that we've got
|
| // multiple transactions in the read pipeline; so as we read, we may have
|
| // to skip over data destined for other transactions while we consume
|
| @@ -454,8 +470,10 @@ class SpdyNetworkTransactionTest
|
| private:
|
| bool google_get_request_initialized_;
|
| bool google_post_request_initialized_;
|
| + bool google_chunked_post_request_initialized_;
|
| HttpRequestInfo google_get_request_;
|
| HttpRequestInfo google_post_request_;
|
| + HttpRequestInfo google_chunked_post_request_;
|
| HttpRequestInfo google_get_push_request_;
|
| };
|
|
|
| @@ -1525,6 +1543,38 @@ TEST_P(SpdyNetworkTransactionTest, Post) {
|
| EXPECT_EQ("hello!", out.response_data);
|
| }
|
|
|
| +// Test that a chunked POST works.
|
| +TEST_P(SpdyNetworkTransactionTest, ChunkedPost) {
|
| + UploadDataStream::set_merge_chunks(false);
|
| + scoped_ptr<spdy::SpdyFrame> req(ConstructChunkedSpdyPost(NULL, 0));
|
| + scoped_ptr<spdy::SpdyFrame> chunk1(ConstructSpdyBodyFrame(1, false));
|
| + scoped_ptr<spdy::SpdyFrame> chunk2(ConstructSpdyBodyFrame(1, true));
|
| + MockWrite writes[] = {
|
| + CreateMockWrite(*req),
|
| + CreateMockWrite(*chunk1),
|
| + CreateMockWrite(*chunk2),
|
| + };
|
| +
|
| + scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
|
| + MockRead reads[] = {
|
| + CreateMockRead(*resp),
|
| + CreateMockRead(*chunk1),
|
| + CreateMockRead(*chunk2),
|
| + MockRead(true, 0, 0) // EOF
|
| + };
|
| +
|
| + scoped_refptr<DelayedSocketData> data(
|
| + new DelayedSocketData(2, reads, arraysize(reads),
|
| + writes, arraysize(writes)));
|
| + NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(),
|
| + BoundNetLog(), GetParam());
|
| + helper.RunToCompletion(data.get());
|
| + TransactionHelperResult out = helper.output();
|
| + EXPECT_EQ(OK, out.rv);
|
| + EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
|
| + EXPECT_EQ("hello!hello!", out.response_data);
|
| +}
|
| +
|
| // Test that a POST without any post data works.
|
| TEST_P(SpdyNetworkTransactionTest, NullPost) {
|
| // Setup the request
|
|
|