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

Unified Diff: net/spdy/spdy_network_transaction_unittest.cc

Issue 1126763002: Revert of Convert SpdyNetworkTransactionTest to SequencedSocketData. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 28f4a18457fa06524c4e0ae25f67dd1fa6796a5b..3c2073cfec610c66fbcb777871c978946eadfe69 100644
--- a/net/spdy/spdy_network_transaction_unittest.cc
+++ b/net/spdy/spdy_network_transaction_unittest.cc
@@ -268,9 +268,14 @@
// should end with an empty read, and that read needs to be processed to
// ensure proper deletion of the spdy_session_pool.
void VerifyDataConsumed() {
- for (const SocketDataProvider* provider : data_vector_) {
- EXPECT_TRUE(provider->AllReadDataConsumed());
- EXPECT_TRUE(provider->AllWriteDataConsumed());
+ for (DataVector::iterator it = data_vector_.begin();
+ it != data_vector_.end(); ++it) {
+ EXPECT_TRUE((*it)->AllReadDataConsumed())
+ << "Read count: " << (*it)->read_count()
+ << " Read index: " << (*it)->read_index();
+ EXPECT_TRUE((*it)->AllWriteDataConsumed())
+ << "Write count: " << (*it)->write_count()
+ << " Write index: " << (*it)->write_index();
}
}
@@ -278,13 +283,18 @@
// processed. In that case we want to explicitly ensure that the reads were
// not processed.
void VerifyDataNotConsumed() {
- for (const SocketDataProvider* provider : data_vector_) {
- EXPECT_FALSE(provider->AllReadDataConsumed());
- EXPECT_FALSE(provider->AllWriteDataConsumed());
+ for (DataVector::iterator it = data_vector_.begin();
+ it != data_vector_.end(); ++it) {
+ EXPECT_TRUE(!(*it)->AllReadDataConsumed())
+ << "Read count: " << (*it)->read_count()
+ << " Read index: " << (*it)->read_index();
+ EXPECT_TRUE(!(*it)->AllWriteDataConsumed())
+ << "Write count: " << (*it)->write_count()
+ << " Write index: " << (*it)->write_index();
}
}
- void RunToCompletion(SocketDataProvider* data) {
+ void RunToCompletion(StaticSocketDataProvider* data) {
RunPreTestSetup();
AddData(data);
RunDefaultTest();
@@ -292,7 +302,7 @@
}
void RunToCompletionWithSSLData(
- SocketDataProvider* data,
+ StaticSocketDataProvider* data,
scoped_ptr<SSLSocketDataProvider> ssl_provider) {
RunPreTestSetup();
AddDataWithSSLSocketDataProvider(data, ssl_provider.Pass());
@@ -300,7 +310,7 @@
VerifyDataConsumed();
}
- void AddData(SocketDataProvider* data) {
+ void AddData(StaticSocketDataProvider* data) {
scoped_ptr<SSLSocketDataProvider> ssl_provider(
new SSLSocketDataProvider(ASYNC, OK));
ssl_provider->cert =
@@ -309,7 +319,7 @@
}
void AddDataWithSSLSocketDataProvider(
- SocketDataProvider* data,
+ StaticSocketDataProvider* data,
scoped_ptr<SSLSocketDataProvider> ssl_provider) {
DCHECK(!deterministic_);
data_vector_.push_back(data);
@@ -377,16 +387,16 @@
}
private:
- typedef std::vector<SocketDataProvider*> DataVector;
+ typedef std::vector<StaticSocketDataProvider*> DataVector;
typedef ScopedVector<SSLSocketDataProvider> SSLVector;
- typedef ScopedVector<SocketDataProvider> AlternateVector;
+ typedef ScopedVector<StaticSocketDataProvider> AlternateVector;
typedef ScopedVector<DeterministicSocketData> AlternateDeterministicVector;
HttpRequestInfo request_;
RequestPriority priority_;
scoped_ptr<SpdySessionDependencies> session_deps_;
scoped_refptr<HttpNetworkSession> session_;
TransactionHelperResult output_;
- scoped_ptr<SocketDataProvider> first_transaction_;
+ scoped_ptr<StaticSocketDataProvider> first_transaction_;
SSLVector ssl_vector_;
TestCompletionCallback callback_;
scoped_ptr<HttpNetworkTransaction> trans_;
@@ -553,7 +563,7 @@
// to skip over data destined for other transactions while we consume
// the data for |trans|.
int ReadResult(HttpNetworkTransaction* trans,
- SocketDataProvider* data,
+ StaticSocketDataProvider* data,
std::string* result) {
const int kSize = 3000;
@@ -563,6 +573,12 @@
while (true) {
int rv = trans->Read(buf.get(), kSize, callback.callback());
if (rv == ERR_IO_PENDING) {
+ // Multiple transactions may be in the data set. Keep pulling off
+ // reads until we complete our callback.
+ while (!callback.have_result()) {
+ data->CompleteRead();
+ base::RunLoop().RunUntilIdle();
+ }
rv = callback.WaitForResult();
} else if (rv <= 0) {
break;
@@ -590,7 +606,7 @@
EXPECT_EQ(0u, spdy_session->num_unclaimed_pushed_streams());
}
- void RunServerPushTest(SequencedSocketData* data,
+ void RunServerPushTest(OrderedSocketData* data,
HttpResponseInfo* response,
HttpResponseInfo* push_response,
const std::string& expected) {
@@ -731,17 +747,18 @@
// Construct the request.
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -757,7 +774,7 @@
// Construct the request.
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, p, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
SpdyPriority spdy_prio = 0;
EXPECT_TRUE(GetSpdyPriority(spdy_util_.spdy_version(), *req, &spdy_prio));
@@ -807,13 +824,13 @@
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
HttpRequestInfo http_req = CreateGetRequest();
NormalSpdyTransactionHelper helper(http_req, p, BoundNetLog(),
@@ -856,26 +873,27 @@
scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(5, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
- CreateMockWrite(*req2, 3),
- CreateMockWrite(*req3, 6),
- };
- MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- CreateMockRead(*resp2, 4),
- CreateMockRead(*body2, 5),
- CreateMockRead(*resp3, 7),
- CreateMockRead(*body3, 8),
-
- CreateMockRead(*fbody, 9),
- CreateMockRead(*fbody2, 10),
- CreateMockRead(*fbody3, 11),
-
- MockRead(ASYNC, 0, 12), // EOF
- };
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
- SequencedSocketData data_placeholder(NULL, 0, NULL, 0);
+ CreateMockWrite(*req),
+ CreateMockWrite(*req2),
+ CreateMockWrite(*req3),
+ };
+ MockRead reads[] = {
+ CreateMockRead(*resp, 1),
+ CreateMockRead(*body),
+ CreateMockRead(*resp2, 4),
+ CreateMockRead(*body2),
+ CreateMockRead(*resp3, 7),
+ CreateMockRead(*body3),
+
+ CreateMockRead(*fbody),
+ CreateMockRead(*fbody2),
+ CreateMockRead(*fbody3),
+
+ MockRead(ASYNC, 0, 0), // EOF
+ };
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
+ OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
BoundNetLog log;
TransactionHelperResult out;
@@ -946,21 +964,23 @@
scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*req2, 3),
- };
- MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- CreateMockRead(*resp2, 4),
- CreateMockRead(*body2, 5),
- CreateMockRead(*fbody, 6),
- CreateMockRead(*fbody2, 7),
- MockRead(ASYNC, 0, 8), // EOF
- };
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockWrite(*req),
+ CreateMockWrite(*req2),
+ };
+ MockRead reads[] = {
+ CreateMockRead(*resp, 1),
+ CreateMockRead(*body),
+ CreateMockRead(*resp2, 4),
+ CreateMockRead(*body2),
+ CreateMockRead(*fbody),
+ CreateMockRead(*fbody2),
+ MockRead(ASYNC, 0, 0), // EOF
+ };
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING);
- SequencedSocketData data_placeholder(NULL, 0, NULL, 0);
+ OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
data_placeholder.set_connect_data(never_finishing_connect);
BoundNetLog log;
@@ -1031,23 +1051,24 @@
scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*req2, 3),
- };
- MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- CreateMockRead(*resp2, 4),
- CreateMockRead(*body2, 5),
- CreateMockRead(*fbody, 6),
- CreateMockRead(*fbody2, 7),
- MockRead(ASYNC, 0, 8), // EOF
- };
- SequencedSocketData preconnect_data(reads, arraysize(reads), writes,
- arraysize(writes));
+ CreateMockWrite(*req),
+ CreateMockWrite(*req2),
+ };
+ MockRead reads[] = {
+ CreateMockRead(*resp, 1),
+ CreateMockRead(*body),
+ CreateMockRead(*resp2, 4),
+ CreateMockRead(*body2),
+ CreateMockRead(*fbody),
+ CreateMockRead(*fbody2),
+ MockRead(ASYNC, 0, 0), // EOF
+ };
+ OrderedSocketData preconnect_data(reads, arraysize(reads),
+ writes, arraysize(writes));
MockConnect never_finishing_connect(ASYNC, ERR_IO_PENDING);
- SequencedSocketData data_placeholder(NULL, 0, NULL, 0);
+ OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
data_placeholder.set_connect_data(never_finishing_connect);
BoundNetLog log;
@@ -1149,28 +1170,29 @@
scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
- CreateMockWrite(*settings_ack, 5),
- CreateMockWrite(*req2, 6),
- CreateMockWrite(*req3, 10),
- };
-
- MockRead reads[] = {
- CreateMockRead(*settings_frame, 1),
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- CreateMockRead(*fbody, 4),
- CreateMockRead(*resp2, 7),
- CreateMockRead(*body2, 8),
- CreateMockRead(*fbody2, 9),
- CreateMockRead(*resp3, 11),
- CreateMockRead(*body3, 12),
- CreateMockRead(*fbody3, 13),
-
- MockRead(ASYNC, 0, 14), // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockWrite(*req),
+ CreateMockWrite(*settings_ack, 2),
+ CreateMockWrite(*req2),
+ CreateMockWrite(*req3),
+ };
+
+ MockRead reads[] = {
+ CreateMockRead(*settings_frame, 1),
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ CreateMockRead(*fbody),
+ CreateMockRead(*resp2, 8),
+ CreateMockRead(*body2),
+ CreateMockRead(*fbody2),
+ CreateMockRead(*resp3, 13),
+ CreateMockRead(*body3),
+ CreateMockRead(*fbody3),
+
+ MockRead(ASYNC, 0, 0), // EOF
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
BoundNetLog log;
TransactionHelperResult out;
@@ -1207,6 +1229,7 @@
ASSERT_EQ(out.rv, ERR_IO_PENDING);
out.rv = callback2.WaitForResult();
ASSERT_EQ(OK, out.rv);
+ EXPECT_EQ(7U, data.read_index()); // i.e. the third trans was queued
out.rv = callback3.WaitForResult();
ASSERT_EQ(OK, out.rv);
@@ -1280,162 +1303,32 @@
scoped_ptr<SpdyFrame> settings_frame(
spdy_util_.ConstructSpdySettings(settings));
scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
- MockWrite writes[] = {
- CreateMockWrite(*req, 0),
- CreateMockWrite(*settings_ack, 5),
- // By making these synchronous, it guarantees that they are not *started*
- // before their sequence number, which in turn verifies that only a single
- // request is in-flight at a time.
- CreateMockWrite(*req2, 6, SYNCHRONOUS),
- CreateMockWrite(*req4, 10, SYNCHRONOUS),
- CreateMockWrite(*req3, 13, SYNCHRONOUS),
- };
- MockRead reads[] = {
- CreateMockRead(*settings_frame, 1),
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- CreateMockRead(*fbody, 4),
- CreateMockRead(*resp2, 7),
- CreateMockRead(*body2, 8),
- CreateMockRead(*fbody2, 9),
- CreateMockRead(*resp4, 11),
- CreateMockRead(*fbody4, 12),
- CreateMockRead(*resp3, 14),
- CreateMockRead(*body3, 15),
- CreateMockRead(*fbody3, 16),
-
- MockRead(ASYNC, 0, 17), // EOF
- };
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
- BoundNetLog log;
- TransactionHelperResult out;
- NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
- BoundNetLog(), GetParam(), NULL);
- helper.RunPreTestSetup();
- helper.AddData(&data);
-
- scoped_ptr<HttpNetworkTransaction> trans1(
- new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
- scoped_ptr<HttpNetworkTransaction> trans2(
- new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
- scoped_ptr<HttpNetworkTransaction> trans3(
- new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
- scoped_ptr<HttpNetworkTransaction> trans4(
- new HttpNetworkTransaction(HIGHEST, helper.session().get()));
-
- TestCompletionCallback callback1;
- TestCompletionCallback callback2;
- TestCompletionCallback callback3;
- TestCompletionCallback callback4;
-
- HttpRequestInfo httpreq1 = CreateGetRequest();
- HttpRequestInfo httpreq2 = CreateGetRequest();
- HttpRequestInfo httpreq3 = CreateGetRequest();
- HttpRequestInfo httpreq4 = CreateGetRequest();
-
- out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
- ASSERT_EQ(ERR_IO_PENDING, out.rv);
- // Run transaction 1 through quickly to force a read of our SETTINGS frame.
- out.rv = callback1.WaitForResult();
- ASSERT_EQ(OK, out.rv);
-
- out.rv = trans2->Start(&httpreq2, callback2.callback(), log);
- ASSERT_EQ(ERR_IO_PENDING, out.rv);
- out.rv = trans3->Start(&httpreq3, callback3.callback(), log);
- ASSERT_EQ(ERR_IO_PENDING, out.rv);
- out.rv = trans4->Start(&httpreq4, callback4.callback(), log);
- ASSERT_EQ(ERR_IO_PENDING, out.rv);
-
- out.rv = callback2.WaitForResult();
- ASSERT_EQ(OK, out.rv);
-
- out.rv = callback3.WaitForResult();
- ASSERT_EQ(OK, out.rv);
-
- const HttpResponseInfo* response1 = trans1->GetResponseInfo();
- EXPECT_TRUE(response1->headers.get() != NULL);
- EXPECT_TRUE(response1->was_fetched_via_spdy);
- out.status_line = response1->headers->GetStatusLine();
- out.response_info = *response1;
- out.rv = ReadTransaction(trans1.get(), &out.response_data);
- EXPECT_EQ(OK, out.rv);
- EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
- EXPECT_EQ("hello!hello!", out.response_data);
-
- const HttpResponseInfo* response2 = trans2->GetResponseInfo();
- out.status_line = response2->headers->GetStatusLine();
- out.response_info = *response2;
- out.rv = ReadTransaction(trans2.get(), &out.response_data);
- EXPECT_EQ(OK, out.rv);
- EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
- EXPECT_EQ("hello!hello!", out.response_data);
-
- // notice: response3 gets two hellos, response4 gets one
- // hello, so we know dequeuing priority was respected.
- const HttpResponseInfo* response3 = trans3->GetResponseInfo();
- out.status_line = response3->headers->GetStatusLine();
- out.response_info = *response3;
- out.rv = ReadTransaction(trans3.get(), &out.response_data);
- EXPECT_EQ(OK, out.rv);
- EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
- EXPECT_EQ("hello!hello!", out.response_data);
-
- out.rv = callback4.WaitForResult();
- EXPECT_EQ(OK, out.rv);
- const HttpResponseInfo* response4 = trans4->GetResponseInfo();
- out.status_line = response4->headers->GetStatusLine();
- out.response_info = *response4;
- out.rv = ReadTransaction(trans4.get(), &out.response_data);
- EXPECT_EQ(OK, out.rv);
- EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
- EXPECT_EQ("hello!", out.response_data);
- helper.VerifyDataConsumed();
- EXPECT_EQ(OK, out.rv);
-}
-
-// Similar to ThreeGetsMaxConcurrrent above, however, this test
-// deletes a session in the middle of the transaction to ensure
-// that we properly remove pendingcreatestream objects from
-// the spdy_session
-TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentDelete) {
- // Construct the request.
- scoped_ptr<SpdyFrame> req(
- spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
- scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false));
- scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true));
-
- scoped_ptr<SpdyFrame> req2(
- spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
- scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
- scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false));
- scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
-
- SettingsMap settings;
- const uint32 max_concurrent_streams = 1;
- settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
- SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
- scoped_ptr<SpdyFrame> settings_frame(
- spdy_util_.ConstructSpdySettings(settings));
- scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
-
- MockWrite writes[] = {
- CreateMockWrite(*req, 0),
- CreateMockWrite(*settings_ack, 5),
- CreateMockWrite(*req2, 6),
- };
- MockRead reads[] = {
- CreateMockRead(*settings_frame, 1),
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- CreateMockRead(*fbody, 4),
- CreateMockRead(*resp2, 7),
- CreateMockRead(*body2, 8),
- CreateMockRead(*fbody2, 9),
- MockRead(ASYNC, 0, 10), // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+
+ MockWrite writes[] = { CreateMockWrite(*req),
+ CreateMockWrite(*settings_ack, 2),
+ CreateMockWrite(*req2),
+ CreateMockWrite(*req4),
+ CreateMockWrite(*req3),
+ };
+ MockRead reads[] = {
+ CreateMockRead(*settings_frame, 1),
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ CreateMockRead(*fbody),
+ CreateMockRead(*resp2, 8),
+ CreateMockRead(*body2),
+ CreateMockRead(*fbody2),
+ CreateMockRead(*resp4, 14),
+ CreateMockRead(*fbody4),
+ CreateMockRead(*resp3, 17),
+ CreateMockRead(*body3),
+ CreateMockRead(*fbody3),
+
+ MockRead(ASYNC, 0, 0), // EOF
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
BoundNetLog log;
TransactionHelperResult out;
@@ -1449,6 +1342,137 @@
new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
scoped_ptr<HttpNetworkTransaction> trans3(
new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
+ scoped_ptr<HttpNetworkTransaction> trans4(
+ new HttpNetworkTransaction(HIGHEST, helper.session().get()));
+
+ TestCompletionCallback callback1;
+ TestCompletionCallback callback2;
+ TestCompletionCallback callback3;
+ TestCompletionCallback callback4;
+
+ HttpRequestInfo httpreq1 = CreateGetRequest();
+ HttpRequestInfo httpreq2 = CreateGetRequest();
+ HttpRequestInfo httpreq3 = CreateGetRequest();
+ HttpRequestInfo httpreq4 = CreateGetRequest();
+
+ out.rv = trans1->Start(&httpreq1, callback1.callback(), log);
+ ASSERT_EQ(ERR_IO_PENDING, out.rv);
+ // Run transaction 1 through quickly to force a read of our SETTINGS frame.
+ out.rv = callback1.WaitForResult();
+ ASSERT_EQ(OK, out.rv);
+
+ out.rv = trans2->Start(&httpreq2, callback2.callback(), log);
+ ASSERT_EQ(ERR_IO_PENDING, out.rv);
+ out.rv = trans3->Start(&httpreq3, callback3.callback(), log);
+ ASSERT_EQ(ERR_IO_PENDING, out.rv);
+ out.rv = trans4->Start(&httpreq4, callback4.callback(), log);
+ ASSERT_EQ(ERR_IO_PENDING, out.rv);
+
+ out.rv = callback2.WaitForResult();
+ ASSERT_EQ(OK, out.rv);
+ EXPECT_EQ(data.read_index(), 7U); // i.e. the third & fourth trans queued
+
+ out.rv = callback3.WaitForResult();
+ ASSERT_EQ(OK, out.rv);
+
+ const HttpResponseInfo* response1 = trans1->GetResponseInfo();
+ EXPECT_TRUE(response1->headers.get() != NULL);
+ EXPECT_TRUE(response1->was_fetched_via_spdy);
+ out.status_line = response1->headers->GetStatusLine();
+ out.response_info = *response1;
+ out.rv = ReadTransaction(trans1.get(), &out.response_data);
+ EXPECT_EQ(OK, out.rv);
+ EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
+ EXPECT_EQ("hello!hello!", out.response_data);
+
+ const HttpResponseInfo* response2 = trans2->GetResponseInfo();
+ out.status_line = response2->headers->GetStatusLine();
+ out.response_info = *response2;
+ out.rv = ReadTransaction(trans2.get(), &out.response_data);
+ EXPECT_EQ(OK, out.rv);
+ EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
+ EXPECT_EQ("hello!hello!", out.response_data);
+
+ // notice: response3 gets two hellos, response4 gets one
+ // hello, so we know dequeuing priority was respected.
+ const HttpResponseInfo* response3 = trans3->GetResponseInfo();
+ out.status_line = response3->headers->GetStatusLine();
+ out.response_info = *response3;
+ out.rv = ReadTransaction(trans3.get(), &out.response_data);
+ EXPECT_EQ(OK, out.rv);
+ EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
+ EXPECT_EQ("hello!hello!", out.response_data);
+
+ out.rv = callback4.WaitForResult();
+ EXPECT_EQ(OK, out.rv);
+ const HttpResponseInfo* response4 = trans4->GetResponseInfo();
+ out.status_line = response4->headers->GetStatusLine();
+ out.response_info = *response4;
+ out.rv = ReadTransaction(trans4.get(), &out.response_data);
+ EXPECT_EQ(OK, out.rv);
+ EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
+ EXPECT_EQ("hello!", out.response_data);
+ helper.VerifyDataConsumed();
+ EXPECT_EQ(OK, out.rv);
+}
+
+// Similar to ThreeGetsMaxConcurrrent above, however, this test
+// deletes a session in the middle of the transaction to insure
+// that we properly remove pendingcreatestream objects from
+// the spdy_session
+TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentDelete) {
+ // Construct the request.
+ scoped_ptr<SpdyFrame> req(
+ spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
+ scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
+ scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false));
+ scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true));
+
+ scoped_ptr<SpdyFrame> req2(
+ spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
+ scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
+ scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false));
+ scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
+
+ SettingsMap settings;
+ const uint32 max_concurrent_streams = 1;
+ settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
+ SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
+ scoped_ptr<SpdyFrame> settings_frame(
+ spdy_util_.ConstructSpdySettings(settings));
+ scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
+
+ MockWrite writes[] = {
+ CreateMockWrite(*req),
+ CreateMockWrite(*settings_ack, 2),
+ CreateMockWrite(*req2),
+ };
+ MockRead reads[] = {
+ CreateMockRead(*settings_frame, 1),
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ CreateMockRead(*fbody),
+ CreateMockRead(*resp2, 8),
+ CreateMockRead(*body2),
+ CreateMockRead(*fbody2),
+ MockRead(ASYNC, 0, 0), // EOF
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
+
+ BoundNetLog log;
+ TransactionHelperResult out;
+ NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
+ BoundNetLog(), GetParam(), NULL);
+ helper.RunPreTestSetup();
+ helper.AddData(&data);
+ scoped_ptr<HttpNetworkTransaction> trans1(
+ new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
+ scoped_ptr<HttpNetworkTransaction> trans2(
+ new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
+ scoped_ptr<HttpNetworkTransaction> trans3(
+ new HttpNetworkTransaction(DEFAULT_PRIORITY, helper.session().get()));
TestCompletionCallback callback1;
TestCompletionCallback callback2;
@@ -1471,6 +1495,8 @@
ASSERT_EQ(out.rv, ERR_IO_PENDING);
out.rv = callback2.WaitForResult();
ASSERT_EQ(OK, out.rv);
+
+ EXPECT_EQ(8U, data.read_index());
const HttpResponseInfo* response1 = trans1->GetResponseInfo();
ASSERT_TRUE(response1 != NULL);
@@ -1549,21 +1575,22 @@
scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
- CreateMockWrite(*settings_ack, 5),
- CreateMockWrite(*req2, 6),
- };
- MockRead reads[] = {
- CreateMockRead(*settings_frame, 1),
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- CreateMockRead(*fin_body, 4),
- CreateMockRead(*resp2, 7),
- MockRead(ASYNC, ERR_CONNECTION_RESET, 8), // Abort!
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
- SequencedSocketData data_placeholder(NULL, 0, NULL, 0);
+ CreateMockWrite(*req),
+ CreateMockWrite(*settings_ack, 2),
+ CreateMockWrite(*req2),
+ };
+ MockRead reads[] = {
+ CreateMockRead(*settings_frame, 1),
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ CreateMockRead(*fin_body),
+ CreateMockRead(*resp2, 8),
+ MockRead(ASYNC, ERR_CONNECTION_RESET, 0), // Abort!
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
+ OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
BoundNetLog log;
TransactionHelperResult out;
@@ -1601,6 +1628,8 @@
out.rv = callback3.WaitForResult();
ASSERT_EQ(ERR_ABORTED, out.rv);
+ EXPECT_EQ(6U, data.read_index());
+
const HttpResponseInfo* response1 = trans1.GetResponseInfo();
ASSERT_TRUE(response1 != NULL);
EXPECT_TRUE(response1->headers.get() != NULL);
@@ -1632,18 +1661,19 @@
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdySyn(1, *put_headers, LOWEST, false, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
+ CreateMockWrite(*req),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -1665,18 +1695,19 @@
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdySyn(1, *head_headers, LOWEST, false, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
+ CreateMockWrite(*req),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -1692,17 +1723,19 @@
GetDefaultUrl(), 1, kUploadDataSize, LOWEST, NULL, 0));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*body, 1), // POST upload frame
+ CreateMockWrite(*req),
+ CreateMockWrite(*body), // POST upload frame
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
MockRead reads[] = {
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 4) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(2, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreatePostRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -1718,17 +1751,19 @@
GetDefaultUrl(), 1, kUploadDataSize, LOWEST, NULL, 0));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*body, 1), // POST upload frame
+ CreateMockWrite(*req),
+ CreateMockWrite(*body), // POST upload frame
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
MockRead reads[] = {
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 4) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(2, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateFilePostRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -1741,13 +1776,13 @@
// Test that a POST with a unreadable file fails.
TEST_P(SpdyNetworkTransactionTest, UnreadableFilePost) {
MockWrite writes[] = {
- MockWrite(ASYNC, 0, 0) // EOF
- };
- MockRead reads[] = {
- MockRead(ASYNC, 0, 1) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ MockWrite(ASYNC, 0, 0) // EOF
+ };
+ MockRead reads[] = {
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads), writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateUnreadableFilePostRequest(),
DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -1766,17 +1801,19 @@
GetDefaultUrl(), 1, kUploadDataSize, LOWEST, NULL, 0));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*body, 1), // POST upload frame
+ CreateMockWrite(*req),
+ CreateMockWrite(*body), // POST upload frame
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
MockRead reads[] = {
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 4) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(2, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateComplexPostRequest(),
DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -1792,17 +1829,19 @@
scoped_ptr<SpdyFrame> req(spdy_util_.ConstructChunkedSpdyPost(NULL, 0));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*body, 1),
+ CreateMockWrite(*req),
+ CreateMockWrite(*body),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
MockRead reads[] = {
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 4) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(2, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(),
DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -1827,22 +1866,23 @@
scoped_ptr<SpdyFrame> chunk2(spdy_util_.ConstructSpdyBodyFrame(1, false));
scoped_ptr<SpdyFrame> chunk3(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
- CreateMockWrite(*chunk1, 1),
- CreateMockWrite(*chunk2, 2),
- CreateMockWrite(*chunk3, 3),
+ CreateMockWrite(*req),
+ CreateMockWrite(*chunk1),
+ CreateMockWrite(*chunk2),
+ CreateMockWrite(*chunk3),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
MockRead reads[] = {
- CreateMockRead(*resp, 4),
- CreateMockRead(*chunk1, 5),
- CreateMockRead(*chunk2, 6),
- CreateMockRead(*chunk3, 7),
- MockRead(ASYNC, 0, 8) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*chunk1),
+ CreateMockRead(*chunk2),
+ CreateMockRead(*chunk3),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(4, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(),
DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -1890,18 +1930,19 @@
spdy_util_.ConstructSpdySyn(1, *req_block, LOWEST, false, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
+ CreateMockWrite(*req),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -1933,18 +1974,18 @@
spdy_util_.ConstructSpdySyn(1, *req_block, LOWEST, false, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
+ CreateMockWrite(*req),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads), writes, arraysize(writes));
NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -2047,17 +2088,11 @@
TEST_P(SpdyNetworkTransactionTest, ResponseWithoutSynReply) {
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*body, 1), MockRead(ASYNC, 0, 3) // EOF
- };
-
- scoped_ptr<SpdyFrame> req(
- spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- scoped_ptr<SpdyFrame> rst(
- spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
- MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
- };
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads), NULL, 0);
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -2073,19 +2108,21 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
+ CreateMockWrite(*req),
+ CreateMockWrite(*rst),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*resp, 2),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 5) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -2118,7 +2155,8 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
+ CreateMockWrite(*req),
+ CreateMockWrite(*rst),
};
const char* const headers[] = {
@@ -2129,12 +2167,13 @@
scoped_ptr<SpdyFrame> body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 4) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -2152,7 +2191,8 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
+ CreateMockWrite(*req),
+ CreateMockWrite(*rst),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
@@ -2164,13 +2204,14 @@
GetDefaultUrlWithPath("/1").c_str()));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*push, 2),
- CreateMockRead(*body, 3),
- MockRead(ASYNC, 0, 5) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*push),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -2271,8 +2312,8 @@
TEST_P(SpdyNetworkTransactionTest, StartTransactionOnReadCallback) {
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req)};
- MockWrite writes2[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
+ MockWrite writes2[] = { CreateMockWrite(*req) };
// The indicated length of this frame is longer than its actual length. When
// the session receives an empty frame after this one, it shuts down the
@@ -2293,13 +2334,14 @@
MockRead(ASYNC, 0, 0, 6), // EOF
};
MockRead reads2[] = {
- CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 0, 2), // EOF
+ CreateMockRead(*resp, 2),
+ MockRead(ASYNC, 0, 0, 3), // EOF
};
OrderedSocketData data(reads, arraysize(reads),
writes, arraysize(writes));
- SequencedSocketData data2(reads2, arraysize(reads2), writes2,
- arraysize(writes2));
+ DelayedSocketData data2(1, reads2, arraysize(reads2),
+ writes2, arraysize(writes2));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -2412,9 +2454,10 @@
CreateMockRead(*body2, 3),
MockRead(ASYNC, 0, 0, 4) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
- SequencedSocketData data2(reads2, arraysize(reads2), writes2,
- arraysize(writes2));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
+ OrderedSocketData data2(reads2, arraysize(reads2),
+ writes2, arraysize(writes2));
// TODO(erikchen): Make test support SPDYSSL, SPDYNPN
TestDelegate d;
@@ -2494,9 +2537,10 @@
CreateMockRead(*body2, 3),
MockRead(ASYNC, 0, 0, 5) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
- SequencedSocketData data2(reads2, arraysize(reads2), writes2,
- arraysize(writes2));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
+ OrderedSocketData data2(reads2, arraysize(reads2),
+ writes2, arraysize(writes2));
// TODO(erikchen): Make test support SPDYSSL, SPDYNPN
TestDelegate d;
@@ -2533,6 +2577,8 @@
std::string contents2("hello!");
EXPECT_EQ(contents2, d2.data_received());
}
+ data.CompleteRead();
+ data2.CompleteRead();
EXPECT_TRUE(data.AllReadDataConsumed());
EXPECT_TRUE(data.AllWriteDataConsumed());
EXPECT_TRUE(data2.AllReadDataConsumed());
@@ -2545,7 +2591,7 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
+ CreateMockWrite(*stream1_syn, 1),
};
scoped_ptr<SpdyFrame>
@@ -2557,17 +2603,18 @@
spdy_util_.ConstructSpdyBodyFrame(
2, kPushedData, strlen(kPushedData), true));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream1_body, 3, SYNCHRONOUS),
- CreateMockRead(*stream2_body, 4),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream1_body, 4, SYNCHRONOUS),
+ CreateMockRead(*stream2_body, 5),
+ MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause
};
HttpResponseInfo response;
HttpResponseInfo response2;
std::string expected_push_result("pushed");
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data,
&response,
&response2,
@@ -2588,7 +2635,7 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
+ CreateMockWrite(*stream1_syn, 1),
};
scoped_ptr<SpdyFrame>
@@ -2600,17 +2647,18 @@
spdy_util_.ConstructSpdyBodyFrame(
2, kPushedData, strlen(kPushedData), true));
MockRead reads[] = {
- CreateMockRead(*stream2_syn, 1),
- CreateMockRead(*stream1_reply, 2),
- CreateMockRead(*stream1_body, 3, SYNCHRONOUS),
- CreateMockRead(*stream2_body, 4),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause
+ CreateMockRead(*stream2_syn, 2),
+ CreateMockRead(*stream1_reply, 3),
+ CreateMockRead(*stream1_body, 4, SYNCHRONOUS),
+ CreateMockRead(*stream2_body, 5),
+ MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause
};
HttpResponseInfo response;
HttpResponseInfo response2;
std::string expected_push_result("pushed");
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data,
&response,
&response2,
@@ -2628,9 +2676,7 @@
TEST_P(SpdyNetworkTransactionTest, ServerPushSingleDataFrame2) {
scoped_ptr<SpdyFrame> stream1_syn(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
- };
+ MockWrite writes[] = { CreateMockWrite(*stream1_syn, 1), };
scoped_ptr<SpdyFrame>
stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
@@ -2643,17 +2689,18 @@
scoped_ptr<SpdyFrame>
stream1_body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream2_body, 3),
- CreateMockRead(*stream1_body, 4, SYNCHRONOUS),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream2_body, 4),
+ CreateMockRead(*stream1_body, 5, SYNCHRONOUS),
+ MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause
};
HttpResponseInfo response;
HttpResponseInfo response2;
std::string expected_push_result("pushed");
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data,
&response,
&response2,
@@ -2674,7 +2721,7 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
+ CreateMockWrite(*stream1_syn, 1),
};
scoped_ptr<SpdyFrame>
@@ -2684,14 +2731,15 @@
scoped_ptr<SpdyFrame> stream2_rst(
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream2_rst, 3),
- CreateMockRead(*stream1_body, 4, SYNCHRONOUS),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream2_rst, 4),
+ CreateMockRead(*stream1_body, 5, SYNCHRONOUS),
+ MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -2709,8 +2757,12 @@
EXPECT_EQ(OK, rv);
// Verify that we consumed all test data.
- EXPECT_TRUE(data.AllReadDataConsumed());
- EXPECT_TRUE(data.AllWriteDataConsumed());
+ EXPECT_TRUE(data.AllReadDataConsumed())
+ << "Read count: " << data.read_count()
+ << " Read index: " << data.read_index();
+ EXPECT_TRUE(data.AllWriteDataConsumed())
+ << "Write count: " << data.write_count()
+ << " Write index: " << data.write_index();
// Verify the SYN_REPLY.
HttpResponseInfo response = *trans->GetResponseInfo();
@@ -2728,7 +2780,8 @@
scoped_ptr<SpdyFrame> stream3_rst(
spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream3_rst, 4),
+ CreateMockWrite(*stream1_syn, 1),
+ CreateMockWrite(*stream3_rst, 5),
};
scoped_ptr<SpdyFrame>
@@ -2742,18 +2795,19 @@
scoped_ptr<SpdyFrame> stream3_syn(spdy_util_.ConstructSpdyPush(
NULL, 0, 4, 1, GetDefaultUrlWithPath("/foo.dat").c_str()));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream3_syn, 3),
- CreateMockRead(*stream1_body, 5),
- CreateMockRead(*stream2_body, 6),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), // Force a pause
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream3_syn, 4),
+ CreateMockRead(*stream1_body, 6, SYNCHRONOUS),
+ CreateMockRead(*stream2_body, 7),
+ MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause
};
HttpResponseInfo response;
HttpResponseInfo response2;
std::string expected_push_result("pushed");
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data,
&response,
&response2,
@@ -2774,7 +2828,7 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
+ CreateMockWrite(*stream1_syn, 1),
};
scoped_ptr<SpdyFrame>
@@ -2797,20 +2851,21 @@
new SpdyFrame(stream2_body_base->data() + 3 * kChunkSize,
stream2_body_base->size() - 3 * kChunkSize, false));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream2_body1, 3),
- CreateMockRead(*stream2_body2, 4),
- CreateMockRead(*stream2_body3, 5),
- CreateMockRead(*stream2_body4, 6),
- CreateMockRead(*stream1_body, 7, SYNCHRONOUS),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8), // Force a pause
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream2_body1, 4),
+ CreateMockRead(*stream2_body2, 5),
+ CreateMockRead(*stream2_body3, 6),
+ CreateMockRead(*stream2_body4, 7),
+ CreateMockRead(*stream1_body, 8, SYNCHRONOUS),
+ MockRead(ASYNC, ERR_IO_PENDING, 9), // Force a pause
};
HttpResponseInfo response;
HttpResponseInfo response2;
std::string expected_push_result("pushed my darling hello my baby");
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data, &response, &response2, kPushedData);
// Verify the SYN_REPLY.
@@ -2828,7 +2883,7 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
+ CreateMockWrite(*stream1_syn, 1),
};
scoped_ptr<SpdyFrame>
@@ -2851,19 +2906,21 @@
new SpdyFrame(stream2_body_base->data() + 3 * kChunkSize,
stream2_body_base->size() - 3 * kChunkSize, false));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream2_body1, 3),
- CreateMockRead(*stream2_body2, 4),
- CreateMockRead(*stream2_body3, 5),
- CreateMockRead(*stream2_body4, 6),
- CreateMockRead(*stream1_body.get(), 7, SYNCHRONOUS),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 8) // Force a pause.
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream2_body1, 4),
+ CreateMockRead(*stream2_body2, 5),
+ MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause
+ CreateMockRead(*stream2_body3, 7),
+ CreateMockRead(*stream2_body4, 8),
+ CreateMockRead(*stream1_body.get(), 9, SYNCHRONOUS),
+ MockRead(ASYNC, ERR_IO_PENDING, 10) // Force a pause.
};
HttpResponseInfo response;
HttpResponseInfo response2;
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data, &response, &response2, kPushedData);
// Verify the SYN_REPLY.
@@ -2889,7 +2946,8 @@
scoped_ptr<SpdyFrame> stream2_rst(
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3),
+ CreateMockWrite(*stream1_syn, 1),
+ CreateMockWrite(*stream2_rst, 4),
};
scoped_ptr<SpdyFrame>
@@ -2897,13 +2955,14 @@
scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructSpdyPush(
NULL, 0, 2, 0, GetDefaultUrlWithPath("/foo.dat").c_str()));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream1_body, 4),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5) // Force a pause
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream1_body, 4),
+ MockRead(ASYNC, ERR_IO_PENDING, 5) // Force a pause
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -2921,8 +2980,12 @@
EXPECT_EQ(OK, rv);
// Verify that we consumed all test data.
- EXPECT_TRUE(data.AllReadDataConsumed());
- EXPECT_TRUE(data.AllWriteDataConsumed());
+ EXPECT_TRUE(data.AllReadDataConsumed())
+ << "Read count: " << data.read_count()
+ << " Read index: " << data.read_index();
+ EXPECT_TRUE(data.AllWriteDataConsumed())
+ << "Write count: " << data.write_count()
+ << " Write index: " << data.write_index();
// Verify the SYN_REPLY.
HttpResponseInfo response = *trans->GetResponseInfo();
@@ -2938,7 +3001,8 @@
scoped_ptr<SpdyFrame> stream2_rst(
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_INVALID_STREAM));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3),
+ CreateMockWrite(*stream1_syn, 1),
+ CreateMockWrite(*stream2_rst, 4),
};
scoped_ptr<SpdyFrame>
@@ -2946,13 +3010,14 @@
scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructSpdyPush(
NULL, 0, 2, 9, GetDefaultUrlWithPath("/foo.dat").c_str()));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream1_body, 4),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a pause
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream1_body, 4),
+ MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -2970,8 +3035,12 @@
EXPECT_EQ(OK, rv);
// Verify that we consumed all test data.
- EXPECT_TRUE(data.AllReadDataConsumed());
- EXPECT_TRUE(data.AllWriteDataConsumed());
+ EXPECT_TRUE(data.AllReadDataConsumed())
+ << "Read count: " << data.read_count()
+ << " Read index: " << data.read_index();
+ EXPECT_TRUE(data.AllWriteDataConsumed())
+ << "Write count: " << data.write_count()
+ << " Write index: " << data.write_index();
// Verify the SYN_REPLY.
HttpResponseInfo response = *trans->GetResponseInfo();
@@ -2987,7 +3056,8 @@
scoped_ptr<SpdyFrame> stream2_rst(
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3),
+ CreateMockWrite(*stream1_syn, 1),
+ CreateMockWrite(*stream2_rst, 4),
};
scoped_ptr<SpdyFrame>
@@ -2999,13 +3069,14 @@
scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
incomplete_headers.Pass(), 2, 1));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream1_body, 4),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5) // Force a pause
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream1_body, 4),
+ MockRead(ASYNC, ERR_IO_PENDING, 5) // Force a pause
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -3021,10 +3092,13 @@
EXPECT_EQ(ERR_IO_PENDING, rv);
rv = callback.WaitForResult();
EXPECT_EQ(OK, rv);
-
// Verify that we consumed all test data.
- EXPECT_TRUE(data.AllReadDataConsumed());
- EXPECT_TRUE(data.AllWriteDataConsumed());
+ EXPECT_TRUE(data.AllReadDataConsumed())
+ << "Read count: " << data.read_count()
+ << " Read index: " << data.read_index();
+ EXPECT_TRUE(data.AllWriteDataConsumed())
+ << "Write count: " << data.write_count()
+ << " Write index: " << data.write_index();
// Verify the SYN_REPLY.
HttpResponseInfo response = *trans->GetResponseInfo();
@@ -3082,7 +3156,7 @@
for (size_t i = 0; i < arraysize(test_cases); ++i) {
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
scoped_ptr<SpdyFrame> resp(
spdy_util_.ConstructSpdyGetSynReply(test_cases[i].extra_headers,
@@ -3090,13 +3164,13 @@
1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3200,7 +3274,7 @@
false, 1, LOWEST, true));
MockWrite writes[] = {
- CreateMockWrite(*frame_req, 0),
+ CreateMockWrite(*frame_req),
};
// Construct the reply.
@@ -3213,9 +3287,9 @@
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*frame_reply, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
+ CreateMockRead(*frame_reply),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
// Attach the headers to the request.
@@ -3228,8 +3302,8 @@
request.extra_headers.SetHeader(header_key, header_value);
}
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3302,7 +3376,8 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
+ CreateMockWrite(*req),
+ CreateMockWrite(*rst),
};
// Construct the reply.
@@ -3311,11 +3386,12 @@
test_cases[i].headers, test_cases[i].num_headers, &reply_headers);
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyReply(1, reply_headers));
MockRead reads[] = {
- CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3) // EOF
+ CreateMockRead(*resp),
+ MockRead(ASYNC, 0, 0) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3356,18 +3432,19 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3),
+ CreateMockWrite(*req),
+ CreateMockWrite(*rst),
};
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- MockRead(ASYNC, test_cases[i].syn_reply->data(), wrong_size, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 4) // EOF
+ MockRead(ASYNC, test_cases[i].syn_reply->data(), wrong_size),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3396,15 +3473,16 @@
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_COMPRESSION_ERROR, "Framer error: 5 (DECOMPRESS_FAILURE)."));
- MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 2)};
+ MockWrite writes[] = {CreateMockWrite(*req), CreateMockWrite(*goaway)};
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- MockRead(ASYNC, syn_reply_wrong_length->data(),
- syn_reply_wrong_length->size() - 4, 1),
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ MockRead(ASYNC, syn_reply_wrong_length->data(),
+ syn_reply_wrong_length->size() - 4),
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3421,14 +3499,14 @@
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_COMPRESSION_ERROR, "Framer error: 5 (DECOMPRESS_FAILURE)."));
- MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 2)};
+ MockWrite writes[] = {CreateMockWrite(*req), CreateMockWrite(*goaway)};
// Read HEADERS with corrupted payload.
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
memset(resp->data() + 12, 0xff, resp->size() - 12);
- MockRead reads[] = {CreateMockRead(*resp, 1)};
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ MockRead reads[] = {CreateMockRead(*resp)};
+
+ DelayedSocketData data(1, reads, arraysize(reads), writes, arraysize(writes));
NormalSpdyTransactionHelper helper(
CreateGetRequest(), DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3441,7 +3519,7 @@
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_PROTOCOL_ERROR, "Framer error: 1 (INVALID_CONTROL_FRAME)."));
- MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 2)};
+ MockWrite writes[] = {CreateMockWrite(*req), CreateMockWrite(*goaway)};
// Read WINDOW_UPDATE with incorrectly-sized payload.
// TODO(jgraettinger): SpdyFramer signals this as an INVALID_CONTROL_FRAME,
@@ -3451,9 +3529,9 @@
test::SetFrameLength(bad_window_update.get(),
bad_window_update->size() - 1,
spdy_util_.spdy_version());
- MockRead reads[] = {CreateMockRead(*bad_window_update, 1)};
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ MockRead reads[] = {CreateMockRead(*bad_window_update)};
+
+ DelayedSocketData data(1, reads, arraysize(reads), writes, arraysize(writes));
NormalSpdyTransactionHelper helper(
CreateGetRequest(), DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3502,19 +3580,17 @@
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
const int kChunks = 5;
scoped_ptr<MockWrite[]> writes(ChopWriteFrame(*req.get(), kChunks));
- for (int i = 0; i < kChunks; ++i) {
- writes[i].sequence_number = i;
- }
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, kChunks),
- CreateMockRead(*body, kChunks + 1),
- MockRead(ASYNC, 0, kChunks + 2) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes.get(), kChunks);
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(kChunks, reads, arraysize(reads),
+ writes.get(), kChunks);
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -3535,16 +3611,16 @@
spdy_util_.ConstructSpdyGet(NULL, 0, true, 1, LOWEST, true));
scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_COMPRESSION_ERROR, "Framer error: 5 (DECOMPRESS_FAILURE)."));
- MockWrite writes[] = {CreateMockWrite(*compressed, 0),
- CreateMockWrite(*goaway, 2)};
+ MockWrite writes[] = {CreateMockWrite(*compressed), CreateMockWrite(*goaway)};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
SpdySessionDependencies* session_deps =
CreateSpdySessionDependencies(GetParam());
session_deps->enable_compression = true;
@@ -3563,19 +3639,20 @@
};
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(kExtraHeaders, 1, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
BoundTestNetLog log;
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequestWithUserAgent(),
DEFAULT_PRIORITY,
log.bound(), GetParam(), NULL);
@@ -3654,7 +3731,7 @@
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
// 2 data frames in a single read.
scoped_ptr<SpdyFrame> data_frame_1(
@@ -3843,7 +3920,7 @@
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
// 5 data frames in a single read.
scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
@@ -3859,11 +3936,12 @@
combined_frames, arraysize(combined_frames));
MockRead reads[] = {
- MockRead(ASYNC, combined_frames, combined_frames_len, 1),
- MockRead(ASYNC, 0, 2) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ MockRead(ASYNC, combined_frames, combined_frames_len),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -4116,7 +4194,7 @@
// Construct the request.
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
// Construct the reply.
scoped_ptr<SpdyHeaderBlock> reply_headers(new SpdyHeaderBlock());
@@ -4149,13 +4227,14 @@
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*reply, 1),
- CreateMockRead(*body, 2),
- CreateMockRead(*settings_frame, 3),
- MockRead(ASYNC, 0, 4) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*reply),
+ CreateMockRead(*body),
+ CreateMockRead(*settings_frame),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
helper.AddData(&data);
helper.RunDefaultTest();
helper.VerifyDataConsumed();
@@ -4326,14 +4405,15 @@
TEST_P(SpdyNetworkTransactionTest, GoAwayWithActiveStream) {
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway());
MockRead reads[] = {
- CreateMockRead(*go_away, 1),
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*go_away),
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.AddData(&data);
@@ -4345,14 +4425,16 @@
TEST_P(SpdyNetworkTransactionTest, CloseWithActiveStream) {
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = { CreateMockWrite(*req) };
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
MockRead reads[] = {
- CreateMockRead(*resp, 1), MockRead(SYNCHRONOUS, 0, 2) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp),
+ MockRead(SYNCHRONOUS, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
BoundNetLog log;
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
log, GetParam(), NULL);
@@ -4390,9 +4472,9 @@
scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please."));
MockRead reads[] = {
- CreateMockRead(*go_away, 0),
- };
- SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
+ CreateMockRead(*go_away),
+ };
+ DelayedSocketData data(0, reads, arraysize(reads), nullptr, 0);
helper.RunToCompletion(&data);
TransactionHelperResult out = helper.output();
@@ -4426,12 +4508,12 @@
scoped_ptr<SpdyHeaderBlock> headers(spdy_util_.ConstructGetHeaderBlock(url));
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdySyn(1, *headers, LOWEST, false, true));
- MockWrite writes0[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes0[] = {CreateMockWrite(*req)};
scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please."));
- MockRead reads0[] = {CreateMockRead(*go_away, 1)};
- SequencedSocketData data0(reads0, arraysize(reads0), writes0,
- arraysize(writes0));
+ MockRead reads0[] = {CreateMockRead(*go_away)};
+ DelayedSocketData data0(1, reads0, arraysize(reads0), writes0,
+ arraysize(writes0));
scoped_ptr<SSLSocketDataProvider> ssl_provider0(
new SSLSocketDataProvider(ASYNC, OK));
@@ -4445,16 +4527,16 @@
helper.AddDataWithSSLSocketDataProvider(&data0, ssl_provider0.Pass());
// Second socket: falling back to HTTP/1.1.
- MockWrite writes1[] = {MockWrite(ASYNC, 0,
- "GET / HTTP/1.1\r\n"
- "Host: www.example.org\r\n"
- "Connection: keep-alive\r\n\r\n")};
- MockRead reads1[] = {MockRead(ASYNC, 1,
- "HTTP/1.1 200 OK\r\n"
- "Content-Length: 5\r\n\r\n"
- "hello")};
- SequencedSocketData data1(reads1, arraysize(reads1), writes1,
- arraysize(writes1));
+ MockWrite writes1[] = {MockWrite(
+ "GET / HTTP/1.1\r\n"
+ "Host: www.example.org\r\n"
+ "Connection: keep-alive\r\n\r\n")};
+ MockRead reads1[] = {MockRead(
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Length: 5\r\n\r\n"
+ "hello")};
+ DelayedSocketData data1(1, reads1, arraysize(reads1), writes1,
+ arraysize(writes1));
scoped_ptr<SSLSocketDataProvider> ssl_provider1(
new SSLSocketDataProvider(ASYNC, OK));
@@ -4517,12 +4599,12 @@
// First socket: HTTP/2 CONNECT rejected with HTTP_1_1_REQUIRED.
scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyConnect(
nullptr, 0, 1, LOWEST, HostPortPair("www.example.org", 443)));
- MockWrite writes0[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes0[] = {CreateMockWrite(*req)};
scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway(
0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please."));
- MockRead reads0[] = {CreateMockRead(*go_away, 1)};
- SequencedSocketData data0(reads0, arraysize(reads0), writes0,
- arraysize(writes0));
+ MockRead reads0[] = {CreateMockRead(*go_away)};
+ DelayedSocketData data0(1, reads0, arraysize(reads0), writes0,
+ arraysize(writes0));
scoped_ptr<SSLSocketDataProvider> ssl_provider0(
new SSLSocketDataProvider(ASYNC, OK));
@@ -4537,25 +4619,25 @@
// Second socket: retry using HTTP/1.1.
MockWrite writes1[] = {
- MockWrite(ASYNC, 0,
+ MockWrite(ASYNC, 1,
"CONNECT www.example.org:443 HTTP/1.1\r\n"
"Host: www.example.org\r\n"
"Proxy-Connection: keep-alive\r\n\r\n"),
- MockWrite(ASYNC, 2,
+ MockWrite(ASYNC, 3,
"GET / HTTP/1.1\r\n"
"Host: www.example.org\r\n"
"Connection: keep-alive\r\n\r\n"),
};
MockRead reads1[] = {
- MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n\r\n"),
- MockRead(ASYNC, 3,
+ MockRead(ASYNC, 2, "HTTP/1.1 200 OK\r\n\r\n"),
+ MockRead(ASYNC, 4,
"HTTP/1.1 200 OK\r\n"
"Content-Length: 5\r\n\r\n"
"hello"),
};
- SequencedSocketData data1(reads1, arraysize(reads1), writes1,
- arraysize(writes1));
+ DelayedSocketData data1(1, reads1, arraysize(reads1), writes1,
+ arraysize(writes1));
scoped_ptr<SSLSocketDataProvider> ssl_provider1(
new SSLSocketDataProvider(ASYNC, OK));
@@ -4629,7 +4711,7 @@
CreateMockRead(*body.get(), 4),
MockRead(ASYNC, 0, 0, 5),
};
- scoped_ptr<SequencedSocketData> data(new SequencedSocketData(
+ scoped_ptr<OrderedSocketData> data(new OrderedSocketData(
reads, arraysize(reads), writes, arraysize(writes)));
helper.AddData(data.get());
@@ -4679,17 +4761,19 @@
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0),
+ CreateMockWrite(*req, 1),
};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3), // Force a pause
- };
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*resp, 2),
+ CreateMockRead(*body, 3),
+ MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause
+ MockRead(ASYNC, 0, 5) // EOF
+ };
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
helper.AddData(&data);
HttpNetworkTransaction* trans = helper.trans();
@@ -4744,7 +4828,7 @@
MockRead(ASYNC, 0, 5) // EOF
};
- scoped_ptr<SequencedSocketData> data_proxy(new SequencedSocketData(
+ scoped_ptr<OrderedSocketData> data_proxy(new OrderedSocketData(
reads2, arraysize(reads2), writes2, arraysize(writes2)));
// Create another request to www.example.org, but this time through a proxy.
@@ -4784,6 +4868,7 @@
ASSERT_EQ(OK, ReadTransaction(trans_proxy, &response_data));
EXPECT_EQ("hello!", response_data);
+ data.CompleteRead();
helper_proxy.VerifyDataConsumed();
}
@@ -4795,16 +4880,16 @@
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 0),
- CreateMockRead(*body, 1),
- MockRead(ASYNC, ERR_IO_PENDING, 2),
- MockRead(ASYNC, ERR_CONNECTION_RESET, 3),
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, ERR_IO_PENDING),
+ MockRead(ASYNC, ERR_CONNECTION_RESET),
};
MockRead reads2[] = {
- CreateMockRead(*resp, 0),
- CreateMockRead(*body, 1),
- MockRead(ASYNC, 0, 2) // EOF
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
// This test has a couple of variants.
@@ -4873,18 +4958,18 @@
HttpStreamFactory::set_spdy_enabled(true);
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite spdy_writes[] = { CreateMockWrite(*req) };
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead spdy_reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
- };
-
- SequencedSocketData data(spdy_reads, arraysize(spdy_reads), spdy_writes,
- arraysize(spdy_writes));
+ CreateMockRead(*resp),
+ CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, spdy_reads, arraysize(spdy_reads),
+ spdy_writes, arraysize(spdy_writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -4894,20 +4979,12 @@
EXPECT_EQ("hello!", out.response_data);
HttpStreamFactory::set_spdy_enabled(false);
- MockWrite http_writes[] = {
- MockWrite(SYNCHRONOUS, 0,
- "GET / HTTP/1.1\r\n"
- "Host: www.example.org\r\n"
- "Connection: keep-alive\r\n\r\n"),
- };
-
MockRead http_reads[] = {
- MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 OK\r\n\r\n"),
- MockRead(SYNCHRONOUS, 2, "hello from http"),
- MockRead(SYNCHRONOUS, OK, 3),
- };
- SequencedSocketData data2(http_reads, arraysize(http_reads), http_writes,
- arraysize(http_writes));
+ MockRead("HTTP/1.1 200 OK\r\n\r\n"),
+ MockRead("hello from http"),
+ MockRead(SYNCHRONOUS, OK),
+ };
+ DelayedSocketData data2(1, http_reads, arraysize(http_reads), NULL, 0);
NormalSpdyTransactionHelper helper2(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper2.SetSpdyDisabled();
@@ -4936,7 +5013,8 @@
arraysize(kExtraAuthorizationHeaders) / 2,
false, 3, LOWEST, true));
MockWrite spdy_writes[] = {
- CreateMockWrite(*req_get, 0), CreateMockWrite(*req_get_authorization, 3),
+ CreateMockWrite(*req_get, 1),
+ CreateMockWrite(*req_get_authorization, 4),
};
// The first response is a 401 authentication challenge, and the second
@@ -4958,15 +5036,15 @@
spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
scoped_ptr<SpdyFrame> body_data(spdy_util_.ConstructSpdyBodyFrame(3, true));
MockRead spdy_reads[] = {
- CreateMockRead(*resp_authentication, 1),
- CreateMockRead(*body_authentication, 2),
- CreateMockRead(*resp_data, 4),
- CreateMockRead(*body_data, 5),
- MockRead(ASYNC, 0, 6),
- };
-
- SequencedSocketData data(spdy_reads, arraysize(spdy_reads), spdy_writes,
- arraysize(spdy_writes));
+ CreateMockRead(*resp_authentication, 2),
+ CreateMockRead(*body_authentication, 3),
+ CreateMockRead(*resp_data, 5),
+ CreateMockRead(*body_data, 6),
+ MockRead(ASYNC, 0, 7),
+ };
+
+ OrderedSocketData data(spdy_reads, arraysize(spdy_reads),
+ spdy_writes, arraysize(spdy_writes));
HttpRequestInfo request(CreateGetRequest());
BoundNetLog net_log;
NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY,
@@ -5017,7 +5095,7 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0),
+ CreateMockWrite(*stream1_syn, 1),
};
scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
@@ -5046,18 +5124,19 @@
spdy_util_.ConstructSpdyBodyFrame(
2, kPushedData, strlen(kPushedData), true));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream2_headers, 3),
- CreateMockRead(*stream1_body, 4, SYNCHRONOUS),
- CreateMockRead(*stream2_body, 5),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream2_headers, 4),
+ CreateMockRead(*stream1_body, 5, SYNCHRONOUS),
+ CreateMockRead(*stream2_body, 5),
+ MockRead(ASYNC, ERR_IO_PENDING, 7), // Force a pause
};
HttpResponseInfo response;
HttpResponseInfo response2;
std::string expected_push_result("pushed");
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
RunServerPushTest(&data,
&response,
&response2,
@@ -5444,7 +5523,7 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
+ CreateMockWrite(*req), CreateMockWrite(*rst),
};
scoped_ptr<SpdyFrame> stream1_reply(
@@ -5463,13 +5542,14 @@
scoped_ptr<SpdyFrame> stream1_body(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream1_headers, 2),
- CreateMockRead(*stream1_body, 3),
- MockRead(ASYNC, 0, 5) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*stream1_reply),
+ CreateMockRead(*stream1_headers),
+ CreateMockRead(*stream1_body),
+ MockRead(ASYNC, 0, 0) // EOF
+ };
+
+ DelayedSocketData data(1, reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -5483,7 +5563,8 @@
scoped_ptr<SpdyFrame> rst(
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
+ CreateMockWrite(*req),
+ CreateMockWrite(*rst),
};
scoped_ptr<SpdyFrame> stream1_reply(
@@ -5504,11 +5585,11 @@
scoped_ptr<SpdyFrame> stream1_body2(
spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream1_body, 2),
- CreateMockRead(*stream1_headers, 3),
- CreateMockRead(*stream1_body2, 5),
- MockRead(ASYNC, 0, 6) // EOF
+ CreateMockRead(*stream1_reply),
+ CreateMockRead(*stream1_body),
+ CreateMockRead(*stream1_headers),
+ CreateMockRead(*stream1_body2),
+ MockRead(ASYNC, 0, 0) // EOF
};
DelayedSocketData data(1, reads, arraysize(reads),
@@ -5560,7 +5641,8 @@
scoped_ptr<SpdyFrame> push_rst(
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
MockWrite writes[] = {
- CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*push_rst, 3),
+ CreateMockWrite(*stream1_syn, 1),
+ CreateMockWrite(*push_rst, 4),
};
scoped_ptr<SpdyFrame>
@@ -5579,16 +5661,16 @@
spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL));
MockRead reads[] = {
- CreateMockRead(*stream1_reply, 1),
- CreateMockRead(*stream2_syn, 2),
- CreateMockRead(*stream1_body, 4),
- CreateMockRead(*stream2_body, 5),
- MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause
+ CreateMockRead(*stream1_reply, 2),
+ CreateMockRead(*stream2_syn, 3),
+ CreateMockRead(*stream1_body, 5, SYNCHRONOUS),
+ CreateMockRead(*stream2_body, 6),
+ MockRead(ASYNC, ERR_IO_PENDING, 7), // Force a pause
};
HttpResponseInfo response;
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
HttpRequestInfo request;
request.method = "GET";
@@ -5642,7 +5724,8 @@
scoped_ptr<SpdyFrame> req2(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
MockWrite writes[] = {
- CreateMockWrite(*req, 0), CreateMockWrite(*req2, 2),
+ CreateMockWrite(*req, 1),
+ CreateMockWrite(*req2, 3),
};
scoped_ptr<SpdyFrame> refused(
@@ -5650,13 +5733,14 @@
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(3, true));
MockRead reads[] = {
- CreateMockRead(*refused, 1),
- CreateMockRead(*resp, 3),
- CreateMockRead(*body, 4),
- MockRead(ASYNC, 0, 5) // EOF
- };
-
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ CreateMockRead(*refused, 2),
+ CreateMockRead(*resp, 4),
+ CreateMockRead(*body, 5),
+ MockRead(ASYNC, 0, 6) // EOF
+ };
+
+ OrderedSocketData data(reads, arraysize(reads),
+ writes, arraysize(writes));
NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
BoundNetLog(), GetParam(), NULL);
@@ -5674,8 +5758,12 @@
EXPECT_EQ(OK, rv);
// Verify that we consumed all test data.
- EXPECT_TRUE(data.AllReadDataConsumed());
- EXPECT_TRUE(data.AllWriteDataConsumed());
+ EXPECT_TRUE(data.AllReadDataConsumed())
+ << "Read count: " << data.read_count()
+ << " Read index: " << data.read_index();
+ EXPECT_TRUE(data.AllWriteDataConsumed())
+ << "Write count: " << data.write_count()
+ << " Write index: " << data.write_index();
// Verify the SYN_REPLY.
HttpResponseInfo response = *trans->GetResponseInfo();
@@ -6458,7 +6546,7 @@
CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 2),
};
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads), writes, arraysize(writes));
NormalSpdyTransactionHelper helper(
CreateGetRequest(), DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -6492,7 +6580,7 @@
CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 3),
};
- SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ DelayedSocketData data(1, reads, arraysize(reads), writes, arraysize(writes));
NormalSpdyTransactionHelper helper(
CreateGetRequest(), DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
helper.RunToCompletion(&data);
@@ -6507,18 +6595,17 @@
// Construct the request.
scoped_ptr<SpdyFrame> req(
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
- MockWrite writes[] = {CreateMockWrite(*req, 0)};
+ MockWrite writes[] = {CreateMockWrite(*req)};
scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
MockRead reads[] = {
- CreateMockRead(*resp, 1),
- CreateMockRead(*body, 2),
- MockRead(ASYNC, 0, 3) // EOF
+ CreateMockRead(*resp), CreateMockRead(*body),
+ MockRead(ASYNC, 0, 0) // EOF
};
- SequencedSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ DelayedSocketData data(
+ 1, reads, arraysize(reads), writes, arraysize(writes));
HttpRequestInfo request;
request.method = "GET";
request.url = GURL("https://www.example.org/");
@@ -6570,7 +6657,7 @@
spdy_util_.ConstructSpdyGoAway(0, GOAWAY_INADEQUATE_SECURITY, ""));
MockWrite writes[] = {CreateMockWrite(*goaway)};
- StaticSocketDataProvider data(NULL, 0, writes, arraysize(writes));
+ DelayedSocketData data(1, NULL, 0, writes, arraysize(writes));
HttpRequestInfo request;
request.method = "GET";
request.url = GURL("https://www.example.org/");
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698