Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Side by Side Diff: net/spdy/spdy_network_transaction_unittest.cc

Issue 129543002: Enable SpdyStream's HALF_CLOSED_REMOTE state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add add'l weak_this guard around delegate calls (2nd try). Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_http_stream.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 2041 matching lines...) Expand 10 before | Expand all | Expand 10 after
2052 2052
2053 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, 2053 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
2054 BoundNetLog(), GetParam(), NULL); 2054 BoundNetLog(), GetParam(), NULL);
2055 helper.RunToCompletion(&data); 2055 helper.RunToCompletion(&data);
2056 TransactionHelperResult out = helper.output(); 2056 TransactionHelperResult out = helper.output();
2057 EXPECT_EQ(OK, out.rv); 2057 EXPECT_EQ(OK, out.rv);
2058 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 2058 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
2059 EXPECT_EQ("hello!", out.response_data); 2059 EXPECT_EQ("hello!", out.response_data);
2060 } 2060 }
2061 2061
2062 // While we're doing a post, the server sends back a SYN_REPLY. 2062 // While we're doing a post, the server sends the reply before upload completes.
2063 TEST_P(SpdyNetworkTransactionTest, PostWithEarlySynReply) { 2063 TEST_P(SpdyNetworkTransactionTest, ResponseBeforePostCompletes) {
2064 static const char upload[] = { "hello!" }; 2064 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructChunkedSpdyPost(NULL, 0));
2065 ScopedVector<UploadElementReader> element_readers; 2065 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
2066 element_readers.push_back( 2066 MockWrite writes[] = {
2067 new UploadBytesElementReader(upload, sizeof(upload))); 2067 CreateMockWrite(*req, 0),
2068 UploadDataStream stream(element_readers.Pass(), 0); 2068 CreateMockWrite(*body, 3),
2069 2069 };
2070 // Setup the request 2070 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
2071 HttpRequestInfo request;
2072 request.method = "POST";
2073 request.url = GURL(kRequestUrl);
2074 request.upload_data_stream = &stream;
2075
2076 scoped_ptr<SpdyFrame> stream_reply(
2077 spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
2078 MockRead reads[] = { 2071 MockRead reads[] = {
2079 CreateMockRead(*stream_reply, 1), 2072 CreateMockRead(*resp, 1),
2073 CreateMockRead(*body, 2),
2080 MockRead(ASYNC, 0, 4) // EOF 2074 MockRead(ASYNC, 0, 4) // EOF
2081 }; 2075 };
2082 2076
2083 scoped_ptr<SpdyFrame> req( 2077 // Write the request headers, and read the complete response
2084 spdy_util_.ConstructSpdyPost( 2078 // while still waiting for chunked request data.
2085 kRequestUrl, 1, kUploadDataSize, LOWEST, NULL, 0));
2086 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
2087 scoped_ptr<SpdyFrame> rst(
2088 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
2089 MockWrite writes[] = {
2090 CreateMockWrite(*req, 0),
2091 CreateMockWrite(*body, 2),
2092 CreateMockWrite(*rst, 3)
2093 };
2094
2095 DeterministicSocketData data(reads, arraysize(reads), 2079 DeterministicSocketData data(reads, arraysize(reads),
2096 writes, arraysize(writes)); 2080 writes, arraysize(writes));
2097 NormalSpdyTransactionHelper helper(CreatePostRequest(), DEFAULT_PRIORITY, 2081 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(),
2082 DEFAULT_PRIORITY,
2098 BoundNetLog(), GetParam(), NULL); 2083 BoundNetLog(), GetParam(), NULL);
2099 helper.SetDeterministic(); 2084 helper.SetDeterministic();
2100 helper.RunPreTestSetup(); 2085 helper.RunPreTestSetup();
2101 helper.AddDeterministicData(&data); 2086 helper.AddDeterministicData(&data);
2102 HttpNetworkTransaction* trans = helper.trans();
2103 2087
2104 TestCompletionCallback callback; 2088 ASSERT_TRUE(helper.StartDefaultTest());
2105 int rv = trans->Start(
2106 &CreatePostRequest(), callback.callback(), BoundNetLog());
2107 EXPECT_EQ(ERR_IO_PENDING, rv);
2108 2089
2109 data.RunFor(4); 2090 // Process the request headers, SYN_REPLY, and response body.
2110 rv = callback.WaitForResult(); 2091 // The request body is still in flight.
2111 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, rv); 2092 data.RunFor(3);
2112 data.RunFor(1); 2093
2094 const HttpResponseInfo* response = helper.trans()->GetResponseInfo();
2095 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
2096
2097 // Finish sending the request body.
2098 helper.request().upload_data_stream->AppendChunk(
2099 kUploadData, kUploadDataSize, true);
2100 data.RunFor(2);
2101
2102 std::string response_body;
2103 EXPECT_EQ(OK, ReadTransaction(helper.trans(), &response_body));
2104 EXPECT_EQ(kUploadData, response_body);
2105 helper.VerifyDataConsumed();
2113 } 2106 }
2114 2107
2115 // The client upon cancellation tries to send a RST_STREAM frame. The mock 2108 // The client upon cancellation tries to send a RST_STREAM frame. The mock
2116 // socket causes the TCP write to return zero. This test checks that the client 2109 // socket causes the TCP write to return zero. This test checks that the client
2117 // tries to queue up the RST_STREAM frame again. 2110 // tries to queue up the RST_STREAM frame again.
2118 TEST_P(SpdyNetworkTransactionTest, SocketWriteReturnsZero) { 2111 TEST_P(SpdyNetworkTransactionTest, SocketWriteReturnsZero) {
2119 scoped_ptr<SpdyFrame> req( 2112 scoped_ptr<SpdyFrame> req(
2120 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 2113 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
2121 scoped_ptr<SpdyFrame> rst( 2114 scoped_ptr<SpdyFrame> rst(
2122 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 2115 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
(...skipping 4381 matching lines...) Expand 10 before | Expand all | Expand 10 after
6504 // since we're send-stalled. 6497 // since we're send-stalled.
6505 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control()); 6498 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control());
6506 6499
6507 // Read in WINDOW_UPDATE or SETTINGS frame. 6500 // Read in WINDOW_UPDATE or SETTINGS frame.
6508 data.RunFor((GetParam().protocol >= kProtoSPDY31) ? 8 : 7); 6501 data.RunFor((GetParam().protocol >= kProtoSPDY31) ? 8 : 7);
6509 rv = callback.WaitForResult(); 6502 rv = callback.WaitForResult();
6510 helper.VerifyDataConsumed(); 6503 helper.VerifyDataConsumed();
6511 } 6504 }
6512 6505
6513 } // namespace net 6506 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_http_stream.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698