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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <cstddef> 5 #include <cstddef>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 28 matching lines...) Expand all
39 39
40 class SpdyStreamTest : public ::testing::Test, 40 class SpdyStreamTest : public ::testing::Test,
41 public ::testing::WithParamInterface<NextProto> { 41 public ::testing::WithParamInterface<NextProto> {
42 protected: 42 protected:
43 // A function that takes a SpdyStream and the number of bytes which 43 // A function that takes a SpdyStream and the number of bytes which
44 // will unstall the next frame completely. 44 // will unstall the next frame completely.
45 typedef base::Callback<void(const base::WeakPtr<SpdyStream>&, int32)> 45 typedef base::Callback<void(const base::WeakPtr<SpdyStream>&, int32)>
46 UnstallFunction; 46 UnstallFunction;
47 47
48 SpdyStreamTest() 48 SpdyStreamTest()
49 : spdy_util_(GetParam()), 49 : spdy_util_(GetParam()), session_deps_(GetParam()), offset_(0) {}
50 session_deps_(GetParam()),
51 offset_(0) {}
52 50
53 base::WeakPtr<SpdySession> CreateDefaultSpdySession() { 51 base::WeakPtr<SpdySession> CreateDefaultSpdySession() {
54 SpdySessionKey key(HostPortPair("www.google.com", 80), 52 SpdySessionKey key(HostPortPair("www.google.com", 80),
55 ProxyServer::Direct(), 53 ProxyServer::Direct(),
56 PRIVACY_MODE_DISABLED); 54 PRIVACY_MODE_DISABLED);
57 return CreateInsecureSpdySession(session_, key, BoundNetLog()); 55 return CreateInsecureSpdySession(session_, key, BoundNetLog());
58 } 56 }
59 57
60 virtual void TearDown() { 58 virtual void TearDown() { base::MessageLoop::current()->RunUntilIdle(); }
61 base::MessageLoop::current()->RunUntilIdle();
62 }
63 59
64 void RunResumeAfterUnstallRequestResponseTest( 60 void RunResumeAfterUnstallRequestResponseTest(
65 const UnstallFunction& unstall_function); 61 const UnstallFunction& unstall_function);
66 62
67 void RunResumeAfterUnstallBidirectionalTest( 63 void RunResumeAfterUnstallBidirectionalTest(
68 const UnstallFunction& unstall_function); 64 const UnstallFunction& unstall_function);
69 65
70 // Add{Read,Write}() populates lists that are eventually passed to a 66 // Add{Read,Write}() populates lists that are eventually passed to a
71 // SocketData class. |frame| must live for the whole test. 67 // SocketData class. |frame| must live for the whole test.
72 68
73 void AddRead(const SpdyFrame& frame) { 69 void AddRead(const SpdyFrame& frame) {
74 reads_.push_back(CreateMockRead(frame, offset_++)); 70 reads_.push_back(CreateMockRead(frame, offset_++));
75 } 71 }
76 72
77 void AddWrite(const SpdyFrame& frame) { 73 void AddWrite(const SpdyFrame& frame) {
78 writes_.push_back(CreateMockWrite(frame, offset_++)); 74 writes_.push_back(CreateMockWrite(frame, offset_++));
79 } 75 }
80 76
81 void AddReadEOF() { 77 void AddReadEOF() { reads_.push_back(MockRead(ASYNC, 0, offset_++)); }
82 reads_.push_back(MockRead(ASYNC, 0, offset_++));
83 }
84 78
85 MockRead* GetReads() { 79 MockRead* GetReads() { return vector_as_array(&reads_); }
86 return vector_as_array(&reads_);
87 }
88 80
89 size_t GetNumReads() const { 81 size_t GetNumReads() const { return reads_.size(); }
90 return reads_.size();
91 }
92 82
93 MockWrite* GetWrites() { 83 MockWrite* GetWrites() { return vector_as_array(&writes_); }
94 return vector_as_array(&writes_);
95 }
96 84
97 int GetNumWrites() const { 85 int GetNumWrites() const { return writes_.size(); }
98 return writes_.size();
99 }
100 86
101 SpdyTestUtil spdy_util_; 87 SpdyTestUtil spdy_util_;
102 SpdySessionDependencies session_deps_; 88 SpdySessionDependencies session_deps_;
103 scoped_refptr<HttpNetworkSession> session_; 89 scoped_refptr<HttpNetworkSession> session_;
104 90
105 private: 91 private:
106 // Used by Add{Read,Write}() above. 92 // Used by Add{Read,Write}() above.
107 std::vector<MockWrite> writes_; 93 std::vector<MockWrite> writes_;
108 std::vector<MockRead> reads_; 94 std::vector<MockRead> reads_;
109 int offset_; 95 int offset_;
110 }; 96 };
111 97
112 INSTANTIATE_TEST_CASE_P( 98 INSTANTIATE_TEST_CASE_P(NextProto,
113 NextProto, 99 SpdyStreamTest,
114 SpdyStreamTest, 100 testing::Values(kProtoDeprecatedSPDY2,
115 testing::Values(kProtoDeprecatedSPDY2, 101 kProtoSPDY3,
116 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); 102 kProtoSPDY31,
103 kProtoSPDY4));
117 104
118 TEST_P(SpdyStreamTest, SendDataAfterOpen) { 105 TEST_P(SpdyStreamTest, SendDataAfterOpen) {
119 GURL url(kStreamUrl); 106 GURL url(kStreamUrl);
120 107
121 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 108 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
122 109
123 scoped_ptr<SpdyFrame> req( 110 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
124 spdy_util_.ConstructSpdyPost( 111 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
125 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
126 AddWrite(*req); 112 AddWrite(*req);
127 113
128 scoped_ptr<SpdyFrame> resp( 114 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
129 spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
130 AddRead(*resp); 115 AddRead(*resp);
131 116
132 scoped_ptr<SpdyFrame> msg( 117 scoped_ptr<SpdyFrame> msg(
133 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 118 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
134 AddWrite(*msg); 119 AddWrite(*msg);
135 120
136 scoped_ptr<SpdyFrame> echo( 121 scoped_ptr<SpdyFrame> echo(
137 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 122 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
138 AddRead(*echo); 123 AddRead(*echo);
139 124
140 AddReadEOF(); 125 AddReadEOF();
141 126
142 OrderedSocketData data(GetReads(), GetNumReads(), 127 OrderedSocketData data(
143 GetWrites(), GetNumWrites()); 128 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
144 MockConnect connect_data(SYNCHRONOUS, OK); 129 MockConnect connect_data(SYNCHRONOUS, OK);
145 data.set_connect_data(connect_data); 130 data.set_connect_data(connect_data);
146 131
147 session_deps_.socket_factory->AddSocketDataProvider(&data); 132 session_deps_.socket_factory->AddSocketDataProvider(&data);
148 133
149 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 134 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
150 135
151 base::WeakPtr<SpdyStream> stream = 136 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
152 CreateStreamSynchronously( 137 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, BoundNetLog());
153 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, BoundNetLog());
154 ASSERT_TRUE(stream.get() != NULL); 138 ASSERT_TRUE(stream.get() != NULL);
155 139
156 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece); 140 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece);
157 stream->SetDelegate(&delegate); 141 stream->SetDelegate(&delegate);
158 142
159 EXPECT_FALSE(stream->HasUrlFromHeaders()); 143 EXPECT_FALSE(stream->HasUrlFromHeaders());
160 144
161 scoped_ptr<SpdyHeaderBlock> headers( 145 scoped_ptr<SpdyHeaderBlock> headers(
162 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 146 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
163 EXPECT_EQ(ERR_IO_PENDING, 147 EXPECT_EQ(ERR_IO_PENDING,
164 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); 148 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND));
165 EXPECT_TRUE(stream->HasUrlFromHeaders()); 149 EXPECT_TRUE(stream->HasUrlFromHeaders());
166 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); 150 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
167 151
168 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 152 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
169 153
170 EXPECT_TRUE(delegate.send_headers_completed()); 154 EXPECT_TRUE(delegate.send_headers_completed());
171 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 155 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
172 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 156 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
173 delegate.TakeReceivedData()); 157 delegate.TakeReceivedData());
174 EXPECT_TRUE(data.at_write_eof()); 158 EXPECT_TRUE(data.at_write_eof());
175 } 159 }
176 160
177 TEST_P(SpdyStreamTest, PushedStream) { 161 TEST_P(SpdyStreamTest, PushedStream) {
178 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 162 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
179 163
180 AddReadEOF(); 164 AddReadEOF();
181 165
182 OrderedSocketData data(GetReads(), GetNumReads(), 166 OrderedSocketData data(
183 GetWrites(), GetNumWrites()); 167 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
184 MockConnect connect_data(SYNCHRONOUS, OK); 168 MockConnect connect_data(SYNCHRONOUS, OK);
185 data.set_connect_data(connect_data); 169 data.set_connect_data(connect_data);
186 170
187 session_deps_.socket_factory->AddSocketDataProvider(&data); 171 session_deps_.socket_factory->AddSocketDataProvider(&data);
188 172
189 base::WeakPtr<SpdySession> spdy_session(CreateDefaultSpdySession()); 173 base::WeakPtr<SpdySession> spdy_session(CreateDefaultSpdySession());
190 174
191 // Conjure up a stream. 175 // Conjure up a stream.
192 SpdyStream stream(SPDY_PUSH_STREAM, 176 SpdyStream stream(SPDY_PUSH_STREAM,
193 spdy_session, 177 spdy_session,
(...skipping 28 matching lines...) Expand all
222 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 206 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
223 207
224 EXPECT_TRUE(spdy_session == NULL); 208 EXPECT_TRUE(spdy_session == NULL);
225 } 209 }
226 210
227 TEST_P(SpdyStreamTest, StreamError) { 211 TEST_P(SpdyStreamTest, StreamError) {
228 GURL url(kStreamUrl); 212 GURL url(kStreamUrl);
229 213
230 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 214 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
231 215
232 scoped_ptr<SpdyFrame> req( 216 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
233 spdy_util_.ConstructSpdyPost( 217 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
234 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
235 AddWrite(*req); 218 AddWrite(*req);
236 219
237 scoped_ptr<SpdyFrame> resp( 220 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
238 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
239 AddRead(*resp); 221 AddRead(*resp);
240 222
241 scoped_ptr<SpdyFrame> msg( 223 scoped_ptr<SpdyFrame> msg(
242 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 224 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
243 AddWrite(*msg); 225 AddWrite(*msg);
244 226
245 scoped_ptr<SpdyFrame> echo( 227 scoped_ptr<SpdyFrame> echo(
246 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 228 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
247 AddRead(*echo); 229 AddRead(*echo);
248 230
249 AddReadEOF(); 231 AddReadEOF();
250 232
251 CapturingBoundNetLog log; 233 CapturingBoundNetLog log;
252 234
253 OrderedSocketData data(GetReads(), GetNumReads(), 235 OrderedSocketData data(
254 GetWrites(), GetNumWrites()); 236 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
255 MockConnect connect_data(SYNCHRONOUS, OK); 237 MockConnect connect_data(SYNCHRONOUS, OK);
256 data.set_connect_data(connect_data); 238 data.set_connect_data(connect_data);
257 239
258 session_deps_.socket_factory->AddSocketDataProvider(&data); 240 session_deps_.socket_factory->AddSocketDataProvider(&data);
259 241
260 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 242 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
261 243
262 base::WeakPtr<SpdyStream> stream = 244 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
263 CreateStreamSynchronously( 245 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, log.bound());
264 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, log.bound());
265 ASSERT_TRUE(stream.get() != NULL); 246 ASSERT_TRUE(stream.get() != NULL);
266 247
267 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece); 248 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece);
268 stream->SetDelegate(&delegate); 249 stream->SetDelegate(&delegate);
269 250
270 EXPECT_FALSE(stream->HasUrlFromHeaders()); 251 EXPECT_FALSE(stream->HasUrlFromHeaders());
271 252
272 scoped_ptr<SpdyHeaderBlock> headers( 253 scoped_ptr<SpdyHeaderBlock> headers(
273 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 254 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
274 EXPECT_EQ(ERR_IO_PENDING, 255 EXPECT_EQ(ERR_IO_PENDING,
(...skipping 11 matching lines...) Expand all
286 delegate.TakeReceivedData()); 267 delegate.TakeReceivedData());
287 EXPECT_TRUE(data.at_write_eof()); 268 EXPECT_TRUE(data.at_write_eof());
288 269
289 // Check that the NetLog was filled reasonably. 270 // Check that the NetLog was filled reasonably.
290 net::CapturingNetLog::CapturedEntryList entries; 271 net::CapturingNetLog::CapturedEntryList entries;
291 log.GetEntries(&entries); 272 log.GetEntries(&entries);
292 EXPECT_LT(0u, entries.size()); 273 EXPECT_LT(0u, entries.size());
293 274
294 // Check that we logged SPDY_STREAM_ERROR correctly. 275 // Check that we logged SPDY_STREAM_ERROR correctly.
295 int pos = net::ExpectLogContainsSomewhere( 276 int pos = net::ExpectLogContainsSomewhere(
296 entries, 0, 277 entries, 0, net::NetLog::TYPE_SPDY_STREAM_ERROR, net::NetLog::PHASE_NONE);
297 net::NetLog::TYPE_SPDY_STREAM_ERROR,
298 net::NetLog::PHASE_NONE);
299 278
300 int stream_id2; 279 int stream_id2;
301 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); 280 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2));
302 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); 281 EXPECT_EQ(static_cast<int>(stream_id), stream_id2);
303 } 282 }
304 283
305 // Make sure that large blocks of data are properly split up into 284 // Make sure that large blocks of data are properly split up into
306 // frame-sized chunks for a request/response (i.e., an HTTP-like) 285 // frame-sized chunks for a request/response (i.e., an HTTP-like)
307 // stream. 286 // stream.
308 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) { 287 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) {
309 GURL url(kStreamUrl); 288 GURL url(kStreamUrl);
310 289
311 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 290 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
312 291
313 scoped_ptr<SpdyFrame> req( 292 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
314 spdy_util_.ConstructSpdyPost( 293 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
315 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
316 AddWrite(*req); 294 AddWrite(*req);
317 295
318 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 296 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
319 scoped_ptr<SpdyFrame> chunk( 297 scoped_ptr<SpdyFrame> chunk(spdy_util_.ConstructSpdyBodyFrame(
320 spdy_util_.ConstructSpdyBodyFrame( 298 1, chunk_data.data(), chunk_data.length(), false));
321 1, chunk_data.data(), chunk_data.length(), false));
322 AddWrite(*chunk); 299 AddWrite(*chunk);
323 AddWrite(*chunk); 300 AddWrite(*chunk);
324 301
325 scoped_ptr<SpdyFrame> last_chunk( 302 scoped_ptr<SpdyFrame> last_chunk(spdy_util_.ConstructSpdyBodyFrame(
326 spdy_util_.ConstructSpdyBodyFrame( 303 1, chunk_data.data(), chunk_data.length(), true));
327 1, chunk_data.data(), chunk_data.length(), true));
328 AddWrite(*last_chunk); 304 AddWrite(*last_chunk);
329 305
330 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 306 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
331 AddRead(*resp); 307 AddRead(*resp);
332 308
333 AddReadEOF(); 309 AddReadEOF();
334 310
335 OrderedSocketData data(GetReads(), GetNumReads(), 311 OrderedSocketData data(
336 GetWrites(), GetNumWrites()); 312 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
337 MockConnect connect_data(SYNCHRONOUS, OK); 313 MockConnect connect_data(SYNCHRONOUS, OK);
338 data.set_connect_data(connect_data); 314 data.set_connect_data(connect_data);
339 315
340 session_deps_.socket_factory->AddSocketDataProvider(&data); 316 session_deps_.socket_factory->AddSocketDataProvider(&data);
341 317
342 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 318 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
343 319
344 base::WeakPtr<SpdyStream> stream = 320 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
345 CreateStreamSynchronously( 321 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
346 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
347 ASSERT_TRUE(stream.get() != NULL); 322 ASSERT_TRUE(stream.get() != NULL);
348 323
349 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x'); 324 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
350 StreamDelegateWithBody delegate(stream, body_data); 325 StreamDelegateWithBody delegate(stream, body_data);
351 stream->SetDelegate(&delegate); 326 stream->SetDelegate(&delegate);
352 327
353 EXPECT_FALSE(stream->HasUrlFromHeaders()); 328 EXPECT_FALSE(stream->HasUrlFromHeaders());
354 329
355 scoped_ptr<SpdyHeaderBlock> headers( 330 scoped_ptr<SpdyHeaderBlock> headers(
356 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 331 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
(...skipping 11 matching lines...) Expand all
368 } 343 }
369 344
370 // Make sure that large blocks of data are properly split up into 345 // Make sure that large blocks of data are properly split up into
371 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like) 346 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like)
372 // stream. 347 // stream.
373 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) { 348 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) {
374 GURL url(kStreamUrl); 349 GURL url(kStreamUrl);
375 350
376 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 351 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
377 352
378 scoped_ptr<SpdyFrame> req( 353 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
379 spdy_util_.ConstructSpdyPost( 354 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
380 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
381 AddWrite(*req); 355 AddWrite(*req);
382 356
383 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 357 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
384 AddRead(*resp); 358 AddRead(*resp);
385 359
386 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 360 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
387 scoped_ptr<SpdyFrame> chunk( 361 scoped_ptr<SpdyFrame> chunk(spdy_util_.ConstructSpdyBodyFrame(
388 spdy_util_.ConstructSpdyBodyFrame( 362 1, chunk_data.data(), chunk_data.length(), false));
389 1, chunk_data.data(), chunk_data.length(), false));
390 AddWrite(*chunk); 363 AddWrite(*chunk);
391 AddWrite(*chunk); 364 AddWrite(*chunk);
392 AddWrite(*chunk); 365 AddWrite(*chunk);
393 366
394 AddReadEOF(); 367 AddReadEOF();
395 368
396 OrderedSocketData data(GetReads(), GetNumReads(), 369 OrderedSocketData data(
397 GetWrites(), GetNumWrites()); 370 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
398 MockConnect connect_data(SYNCHRONOUS, OK); 371 MockConnect connect_data(SYNCHRONOUS, OK);
399 data.set_connect_data(connect_data); 372 data.set_connect_data(connect_data);
400 373
401 session_deps_.socket_factory->AddSocketDataProvider(&data); 374 session_deps_.socket_factory->AddSocketDataProvider(&data);
402 375
403 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 376 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
404 377
405 base::WeakPtr<SpdyStream> stream = 378 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
406 CreateStreamSynchronously( 379 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, BoundNetLog());
407 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, BoundNetLog());
408 ASSERT_TRUE(stream.get() != NULL); 380 ASSERT_TRUE(stream.get() != NULL);
409 381
410 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x'); 382 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
411 StreamDelegateSendImmediate delegate(stream, body_data); 383 StreamDelegateSendImmediate delegate(stream, body_data);
412 stream->SetDelegate(&delegate); 384 stream->SetDelegate(&delegate);
413 385
414 EXPECT_FALSE(stream->HasUrlFromHeaders()); 386 EXPECT_FALSE(stream->HasUrlFromHeaders());
415 387
416 scoped_ptr<SpdyHeaderBlock> headers( 388 scoped_ptr<SpdyHeaderBlock> headers(
417 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 389 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
(...skipping 16 matching lines...) Expand all
434 GURL url(kStreamUrl); 406 GURL url(kStreamUrl);
435 407
436 session_ = 408 session_ =
437 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 409 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
438 410
439 scoped_ptr<SpdyFrame> syn( 411 scoped_ptr<SpdyFrame> syn(
440 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 412 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
441 AddWrite(*syn); 413 AddWrite(*syn);
442 414
443 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 415 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
444 scoped_ptr<SpdyFrame> 416 scoped_ptr<SpdyFrame> reply(
445 reply(spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 417 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
446 AddRead(*reply); 418 AddRead(*reply);
447 419
448 scoped_ptr<SpdyFrame> rst( 420 scoped_ptr<SpdyFrame> rst(
449 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 421 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
450 AddWrite(*rst); 422 AddWrite(*rst);
451 423
452 AddReadEOF(); 424 AddReadEOF();
453 425
454 DeterministicSocketData data(GetReads(), GetNumReads(), 426 DeterministicSocketData data(
455 GetWrites(), GetNumWrites()); 427 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
456 MockConnect connect_data(SYNCHRONOUS, OK); 428 MockConnect connect_data(SYNCHRONOUS, OK);
457 data.set_connect_data(connect_data); 429 data.set_connect_data(connect_data);
458 430
459 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 431 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
460 432
461 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 433 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
462 434
463 base::WeakPtr<SpdyStream> stream = 435 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
464 CreateStreamSynchronously( 436 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
465 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
466 ASSERT_TRUE(stream.get() != NULL); 437 ASSERT_TRUE(stream.get() != NULL);
467 438
468 StreamDelegateDoNothing delegate(stream); 439 StreamDelegateDoNothing delegate(stream);
469 stream->SetDelegate(&delegate); 440 stream->SetDelegate(&delegate);
470 441
471 EXPECT_FALSE(stream->HasUrlFromHeaders()); 442 EXPECT_FALSE(stream->HasUrlFromHeaders());
472 443
473 scoped_ptr<SpdyHeaderBlock> headers( 444 scoped_ptr<SpdyHeaderBlock> headers(
474 spdy_util_.ConstructGetHeaderBlock(kStreamUrl)); 445 spdy_util_.ConstructGetHeaderBlock(kStreamUrl));
475 EXPECT_EQ(ERR_IO_PENDING, 446 EXPECT_EQ(ERR_IO_PENDING,
(...skipping 11 matching lines...) Expand all
487 TEST_P(SpdyStreamTest, UpperCaseHeadersOnPush) { 458 TEST_P(SpdyStreamTest, UpperCaseHeadersOnPush) {
488 GURL url(kStreamUrl); 459 GURL url(kStreamUrl);
489 460
490 session_ = 461 session_ =
491 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 462 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
492 463
493 scoped_ptr<SpdyFrame> syn( 464 scoped_ptr<SpdyFrame> syn(
494 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 465 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
495 AddWrite(*syn); 466 AddWrite(*syn);
496 467
497 scoped_ptr<SpdyFrame> 468 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
498 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
499 AddRead(*reply); 469 AddRead(*reply);
500 470
501 const char* const extra_headers[] = {"X-UpperCase", "yes"}; 471 const char* const extra_headers[] = {"X-UpperCase", "yes"};
502 scoped_ptr<SpdyFrame> 472 scoped_ptr<SpdyFrame> push(
503 push(spdy_util_.ConstructSpdyPush(extra_headers, 1, 2, 1, kStreamUrl)); 473 spdy_util_.ConstructSpdyPush(extra_headers, 1, 2, 1, kStreamUrl));
504 AddRead(*push); 474 AddRead(*push);
505 475
506 scoped_ptr<SpdyFrame> rst( 476 scoped_ptr<SpdyFrame> rst(
507 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 477 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
508 AddWrite(*rst); 478 AddWrite(*rst);
509 479
510 AddReadEOF(); 480 AddReadEOF();
511 481
512 DeterministicSocketData data(GetReads(), GetNumReads(), 482 DeterministicSocketData data(
513 GetWrites(), GetNumWrites()); 483 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
514 MockConnect connect_data(SYNCHRONOUS, OK); 484 MockConnect connect_data(SYNCHRONOUS, OK);
515 data.set_connect_data(connect_data); 485 data.set_connect_data(connect_data);
516 486
517 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 487 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
518 488
519 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 489 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
520 490
521 base::WeakPtr<SpdyStream> stream = 491 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
522 CreateStreamSynchronously( 492 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
523 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
524 ASSERT_TRUE(stream.get() != NULL); 493 ASSERT_TRUE(stream.get() != NULL);
525 494
526 StreamDelegateDoNothing delegate(stream); 495 StreamDelegateDoNothing delegate(stream);
527 stream->SetDelegate(&delegate); 496 stream->SetDelegate(&delegate);
528 497
529 EXPECT_FALSE(stream->HasUrlFromHeaders()); 498 EXPECT_FALSE(stream->HasUrlFromHeaders());
530 499
531 scoped_ptr<SpdyHeaderBlock> headers( 500 scoped_ptr<SpdyHeaderBlock> headers(
532 spdy_util_.ConstructGetHeaderBlock(kStreamUrl)); 501 spdy_util_.ConstructGetHeaderBlock(kStreamUrl));
533 EXPECT_EQ(ERR_IO_PENDING, 502 EXPECT_EQ(ERR_IO_PENDING,
(...skipping 17 matching lines...) Expand all
551 TEST_P(SpdyStreamTest, UpperCaseHeadersInHeadersFrame) { 520 TEST_P(SpdyStreamTest, UpperCaseHeadersInHeadersFrame) {
552 GURL url(kStreamUrl); 521 GURL url(kStreamUrl);
553 522
554 session_ = 523 session_ =
555 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 524 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
556 525
557 scoped_ptr<SpdyFrame> syn( 526 scoped_ptr<SpdyFrame> syn(
558 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 527 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
559 AddWrite(*syn); 528 AddWrite(*syn);
560 529
561 scoped_ptr<SpdyFrame> 530 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
562 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
563 AddRead(*reply); 531 AddRead(*reply);
564 532
565 scoped_ptr<SpdyFrame> 533 scoped_ptr<SpdyFrame> push(
566 push(spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl)); 534 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl));
567 AddRead(*push); 535 AddRead(*push);
568 536
569 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 537 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
570 (*late_headers)["X-UpperCase"] = "yes"; 538 (*late_headers)["X-UpperCase"] = "yes";
571 scoped_ptr<SpdyFrame> headers_frame( 539 scoped_ptr<SpdyFrame> headers_frame(spdy_util_.ConstructSpdyControlFrame(
572 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 540 late_headers.Pass(), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE, 0));
573 false,
574 2,
575 LOWEST,
576 HEADERS,
577 CONTROL_FLAG_NONE,
578 0));
579 AddRead(*headers_frame); 541 AddRead(*headers_frame);
580 542
581 scoped_ptr<SpdyFrame> rst( 543 scoped_ptr<SpdyFrame> rst(
582 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 544 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
583 AddWrite(*rst); 545 AddWrite(*rst);
584 546
585 AddReadEOF(); 547 AddReadEOF();
586 548
587 DeterministicSocketData data(GetReads(), GetNumReads(), 549 DeterministicSocketData data(
588 GetWrites(), GetNumWrites()); 550 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
589 MockConnect connect_data(SYNCHRONOUS, OK); 551 MockConnect connect_data(SYNCHRONOUS, OK);
590 data.set_connect_data(connect_data); 552 data.set_connect_data(connect_data);
591 553
592 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 554 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
593 555
594 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 556 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
595 557
596 base::WeakPtr<SpdyStream> stream = 558 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
597 CreateStreamSynchronously( 559 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
598 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
599 ASSERT_TRUE(stream.get() != NULL); 560 ASSERT_TRUE(stream.get() != NULL);
600 561
601 StreamDelegateDoNothing delegate(stream); 562 StreamDelegateDoNothing delegate(stream);
602 stream->SetDelegate(&delegate); 563 stream->SetDelegate(&delegate);
603 564
604 EXPECT_FALSE(stream->HasUrlFromHeaders()); 565 EXPECT_FALSE(stream->HasUrlFromHeaders());
605 566
606 scoped_ptr<SpdyHeaderBlock> headers( 567 scoped_ptr<SpdyHeaderBlock> headers(
607 spdy_util_.ConstructGetHeaderBlock(kStreamUrl)); 568 spdy_util_.ConstructGetHeaderBlock(kStreamUrl));
608 EXPECT_EQ(ERR_IO_PENDING, 569 EXPECT_EQ(ERR_IO_PENDING,
(...skipping 22 matching lines...) Expand all
631 TEST_P(SpdyStreamTest, DuplicateHeaders) { 592 TEST_P(SpdyStreamTest, DuplicateHeaders) {
632 GURL url(kStreamUrl); 593 GURL url(kStreamUrl);
633 594
634 session_ = 595 session_ =
635 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 596 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
636 597
637 scoped_ptr<SpdyFrame> syn( 598 scoped_ptr<SpdyFrame> syn(
638 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 599 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
639 AddWrite(*syn); 600 AddWrite(*syn);
640 601
641 scoped_ptr<SpdyFrame> 602 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
642 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
643 AddRead(*reply); 603 AddRead(*reply);
644 604
645 scoped_ptr<SpdyFrame> 605 scoped_ptr<SpdyFrame> push(
646 push(spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl)); 606 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl));
647 AddRead(*push); 607 AddRead(*push);
648 608
649 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 609 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
650 (*late_headers)[spdy_util_.GetStatusKey()] = "500 Server Error"; 610 (*late_headers)[spdy_util_.GetStatusKey()] = "500 Server Error";
651 scoped_ptr<SpdyFrame> headers_frame( 611 scoped_ptr<SpdyFrame> headers_frame(spdy_util_.ConstructSpdyControlFrame(
652 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 612 late_headers.Pass(), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE, 0));
653 false,
654 2,
655 LOWEST,
656 HEADERS,
657 CONTROL_FLAG_NONE,
658 0));
659 AddRead(*headers_frame); 613 AddRead(*headers_frame);
660 614
661 scoped_ptr<SpdyFrame> rst( 615 scoped_ptr<SpdyFrame> rst(
662 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 616 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
663 AddWrite(*rst); 617 AddWrite(*rst);
664 618
665 AddReadEOF(); 619 AddReadEOF();
666 620
667 DeterministicSocketData data(GetReads(), GetNumReads(), 621 DeterministicSocketData data(
668 GetWrites(), GetNumWrites()); 622 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
669 MockConnect connect_data(SYNCHRONOUS, OK); 623 MockConnect connect_data(SYNCHRONOUS, OK);
670 data.set_connect_data(connect_data); 624 data.set_connect_data(connect_data);
671 625
672 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 626 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
673 627
674 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 628 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
675 629
676 base::WeakPtr<SpdyStream> stream = 630 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
677 CreateStreamSynchronously( 631 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
678 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
679 ASSERT_TRUE(stream.get() != NULL); 632 ASSERT_TRUE(stream.get() != NULL);
680 633
681 StreamDelegateDoNothing delegate(stream); 634 StreamDelegateDoNothing delegate(stream);
682 stream->SetDelegate(&delegate); 635 stream->SetDelegate(&delegate);
683 636
684 EXPECT_FALSE(stream->HasUrlFromHeaders()); 637 EXPECT_FALSE(stream->HasUrlFromHeaders());
685 638
686 scoped_ptr<SpdyHeaderBlock> headers( 639 scoped_ptr<SpdyHeaderBlock> headers(
687 spdy_util_.ConstructGetHeaderBlock(kStreamUrl)); 640 spdy_util_.ConstructGetHeaderBlock(kStreamUrl));
688 EXPECT_EQ(ERR_IO_PENDING, 641 EXPECT_EQ(ERR_IO_PENDING,
(...skipping 22 matching lines...) Expand all
711 // Call IncreaseSendWindowSize on a stream with a large enough delta 664 // Call IncreaseSendWindowSize on a stream with a large enough delta
712 // to overflow an int32. The SpdyStream should handle that case 665 // to overflow an int32. The SpdyStream should handle that case
713 // gracefully. 666 // gracefully.
714 TEST_P(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { 667 TEST_P(SpdyStreamTest, IncreaseSendWindowSizeOverflow) {
715 if (spdy_util_.protocol() < kProtoSPDY3) 668 if (spdy_util_.protocol() < kProtoSPDY3)
716 return; 669 return;
717 670
718 session_ = 671 session_ =
719 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 672 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
720 673
721 scoped_ptr<SpdyFrame> req( 674 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
722 spdy_util_.ConstructSpdyPost( 675 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
723 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
724 AddWrite(*req); 676 AddWrite(*req);
725 677
726 // Triggered by the overflowing call to IncreaseSendWindowSize 678 // Triggered by the overflowing call to IncreaseSendWindowSize
727 // below. 679 // below.
728 scoped_ptr<SpdyFrame> rst( 680 scoped_ptr<SpdyFrame> rst(
729 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 681 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
730 AddWrite(*rst); 682 AddWrite(*rst);
731 683
732 AddReadEOF(); 684 AddReadEOF();
733 685
734 CapturingBoundNetLog log; 686 CapturingBoundNetLog log;
735 687
736 DeterministicSocketData data(GetReads(), GetNumReads(), 688 DeterministicSocketData data(
737 GetWrites(), GetNumWrites()); 689 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
738 MockConnect connect_data(SYNCHRONOUS, OK); 690 MockConnect connect_data(SYNCHRONOUS, OK);
739 data.set_connect_data(connect_data); 691 data.set_connect_data(connect_data);
740 692
741 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 693 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
742 694
743 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 695 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
744 GURL url(kStreamUrl); 696 GURL url(kStreamUrl);
745 697
746 base::WeakPtr<SpdyStream> stream = 698 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
747 CreateStreamSynchronously( 699 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, log.bound());
748 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, log.bound());
749 ASSERT_TRUE(stream.get() != NULL); 700 ASSERT_TRUE(stream.get() != NULL);
750 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece); 701 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece);
751 stream->SetDelegate(&delegate); 702 stream->SetDelegate(&delegate);
752 703
753 scoped_ptr<SpdyHeaderBlock> headers( 704 scoped_ptr<SpdyHeaderBlock> headers(
754 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 705 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
755 EXPECT_EQ(ERR_IO_PENDING, 706 EXPECT_EQ(ERR_IO_PENDING,
756 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND)); 707 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND));
757 EXPECT_TRUE(stream->HasUrlFromHeaders()); 708 EXPECT_TRUE(stream->HasUrlFromHeaders());
758 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); 709 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 // Given an unstall function, runs a test to make sure that a 754 // Given an unstall function, runs a test to make sure that a
804 // request/response (i.e., an HTTP-like) stream resumes after a stall 755 // request/response (i.e., an HTTP-like) stream resumes after a stall
805 // and unstall. 756 // and unstall.
806 void SpdyStreamTest::RunResumeAfterUnstallRequestResponseTest( 757 void SpdyStreamTest::RunResumeAfterUnstallRequestResponseTest(
807 const UnstallFunction& unstall_function) { 758 const UnstallFunction& unstall_function) {
808 GURL url(kStreamUrl); 759 GURL url(kStreamUrl);
809 760
810 session_ = 761 session_ =
811 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 762 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
812 763
813 scoped_ptr<SpdyFrame> req( 764 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
814 spdy_util_.ConstructSpdyPost( 765 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
815 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
816 AddWrite(*req); 766 AddWrite(*req);
817 767
818 scoped_ptr<SpdyFrame> body( 768 scoped_ptr<SpdyFrame> body(
819 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true)); 769 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true));
820 AddWrite(*body); 770 AddWrite(*body);
821 771
822 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 772 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
823 AddRead(*resp); 773 AddRead(*resp);
824 774
825 AddReadEOF(); 775 AddReadEOF();
826 776
827 DeterministicSocketData data(GetReads(), GetNumReads(), 777 DeterministicSocketData data(
828 GetWrites(), GetNumWrites()); 778 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
829 MockConnect connect_data(SYNCHRONOUS, OK); 779 MockConnect connect_data(SYNCHRONOUS, OK);
830 data.set_connect_data(connect_data); 780 data.set_connect_data(connect_data);
831 781
832 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 782 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
833 783
834 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 784 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
835 785
836 base::WeakPtr<SpdyStream> stream = 786 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
837 CreateStreamSynchronously( 787 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
838 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
839 ASSERT_TRUE(stream.get() != NULL); 788 ASSERT_TRUE(stream.get() != NULL);
840 789
841 StreamDelegateWithBody delegate(stream, kPostBodyStringPiece); 790 StreamDelegateWithBody delegate(stream, kPostBodyStringPiece);
842 stream->SetDelegate(&delegate); 791 stream->SetDelegate(&delegate);
843 792
844 EXPECT_FALSE(stream->HasUrlFromHeaders()); 793 EXPECT_FALSE(stream->HasUrlFromHeaders());
845 EXPECT_FALSE(stream->send_stalled_by_flow_control()); 794 EXPECT_FALSE(stream->send_stalled_by_flow_control());
846 795
847 scoped_ptr<SpdyHeaderBlock> headers( 796 scoped_ptr<SpdyHeaderBlock> headers(
848 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 797 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 // Given an unstall function, runs a test to make sure that a 839 // Given an unstall function, runs a test to make sure that a
891 // bidirectional (i.e., non-HTTP-like) stream resumes after a stall 840 // bidirectional (i.e., non-HTTP-like) stream resumes after a stall
892 // and unstall. 841 // and unstall.
893 void SpdyStreamTest::RunResumeAfterUnstallBidirectionalTest( 842 void SpdyStreamTest::RunResumeAfterUnstallBidirectionalTest(
894 const UnstallFunction& unstall_function) { 843 const UnstallFunction& unstall_function) {
895 GURL url(kStreamUrl); 844 GURL url(kStreamUrl);
896 845
897 session_ = 846 session_ =
898 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 847 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
899 848
900 scoped_ptr<SpdyFrame> req( 849 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
901 spdy_util_.ConstructSpdyPost( 850 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
902 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
903 AddWrite(*req); 851 AddWrite(*req);
904 852
905 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 853 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
906 AddRead(*resp); 854 AddRead(*resp);
907 855
908 scoped_ptr<SpdyFrame> msg( 856 scoped_ptr<SpdyFrame> msg(
909 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 857 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
910 AddWrite(*msg); 858 AddWrite(*msg);
911 859
912 scoped_ptr<SpdyFrame> echo( 860 scoped_ptr<SpdyFrame> echo(
913 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 861 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
914 AddRead(*echo); 862 AddRead(*echo);
915 863
916 AddReadEOF(); 864 AddReadEOF();
917 865
918 DeterministicSocketData data(GetReads(), GetNumReads(), 866 DeterministicSocketData data(
919 GetWrites(), GetNumWrites()); 867 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
920 MockConnect connect_data(SYNCHRONOUS, OK); 868 MockConnect connect_data(SYNCHRONOUS, OK);
921 data.set_connect_data(connect_data); 869 data.set_connect_data(connect_data);
922 870
923 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 871 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
924 872
925 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 873 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
926 874
927 base::WeakPtr<SpdyStream> stream = 875 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
928 CreateStreamSynchronously( 876 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, BoundNetLog());
929 SPDY_BIDIRECTIONAL_STREAM, session, url, LOWEST, BoundNetLog());
930 ASSERT_TRUE(stream.get() != NULL); 877 ASSERT_TRUE(stream.get() != NULL);
931 878
932 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece); 879 StreamDelegateSendImmediate delegate(stream, kPostBodyStringPiece);
933 stream->SetDelegate(&delegate); 880 stream->SetDelegate(&delegate);
934 881
935 EXPECT_FALSE(stream->HasUrlFromHeaders()); 882 EXPECT_FALSE(stream->HasUrlFromHeaders());
936 883
937 scoped_ptr<SpdyHeaderBlock> headers( 884 scoped_ptr<SpdyHeaderBlock> headers(
938 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength)); 885 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
939 EXPECT_EQ(ERR_IO_PENDING, 886 EXPECT_EQ(ERR_IO_PENDING,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 TEST_P(SpdyStreamTest, ReceivedBytes) { 933 TEST_P(SpdyStreamTest, ReceivedBytes) {
987 GURL url(kStreamUrl); 934 GURL url(kStreamUrl);
988 935
989 session_ = 936 session_ =
990 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 937 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
991 938
992 scoped_ptr<SpdyFrame> syn( 939 scoped_ptr<SpdyFrame> syn(
993 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 940 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
994 AddWrite(*syn); 941 AddWrite(*syn);
995 942
996 scoped_ptr<SpdyFrame> 943 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
997 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
998 AddRead(*reply); 944 AddRead(*reply);
999 945
1000 scoped_ptr<SpdyFrame> msg( 946 scoped_ptr<SpdyFrame> msg(
1001 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 947 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
1002 AddRead(*msg); 948 AddRead(*msg);
1003 949
1004 AddReadEOF(); 950 AddReadEOF();
1005 951
1006 DeterministicSocketData data(GetReads(), GetNumReads(), 952 DeterministicSocketData data(
1007 GetWrites(), GetNumWrites()); 953 GetReads(), GetNumReads(), GetWrites(), GetNumWrites());
1008 MockConnect connect_data(SYNCHRONOUS, OK); 954 MockConnect connect_data(SYNCHRONOUS, OK);
1009 data.set_connect_data(connect_data); 955 data.set_connect_data(connect_data);
1010 956
1011 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 957 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
1012 958
1013 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); 959 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
1014 960
1015 base::WeakPtr<SpdyStream> stream = 961 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
1016 CreateStreamSynchronously( 962 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
1017 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
1018 ASSERT_TRUE(stream.get() != NULL); 963 ASSERT_TRUE(stream.get() != NULL);
1019 964
1020 StreamDelegateDoNothing delegate(stream); 965 StreamDelegateDoNothing delegate(stream);
1021 stream->SetDelegate(&delegate); 966 stream->SetDelegate(&delegate);
1022 967
1023 EXPECT_FALSE(stream->HasUrlFromHeaders()); 968 EXPECT_FALSE(stream->HasUrlFromHeaders());
1024 969
1025 scoped_ptr<SpdyHeaderBlock> headers( 970 scoped_ptr<SpdyHeaderBlock> headers(
1026 spdy_util_.ConstructGetHeaderBlock(kStreamUrl)); 971 spdy_util_.ConstructGetHeaderBlock(kStreamUrl));
1027 EXPECT_EQ(ERR_IO_PENDING, 972 EXPECT_EQ(ERR_IO_PENDING,
1028 stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND)); 973 stream->SendRequestHeaders(headers.Pass(), NO_MORE_DATA_TO_SEND));
1029 EXPECT_TRUE(stream->HasUrlFromHeaders()); 974 EXPECT_TRUE(stream->HasUrlFromHeaders());
1030 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); 975 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
1031 976
1032 int64 reply_frame_len = reply->size(); 977 int64 reply_frame_len = reply->size();
1033 int64 data_header_len = spdy_util_.CreateFramer(false) 978 int64 data_header_len =
1034 ->GetDataFrameMinimumSize(); 979 spdy_util_.CreateFramer(false)->GetDataFrameMinimumSize();
1035 int64 data_frame_len = data_header_len + kPostBodyLength; 980 int64 data_frame_len = data_header_len + kPostBodyLength;
1036 int64 response_len = reply_frame_len + data_frame_len; 981 int64 response_len = reply_frame_len + data_frame_len;
1037 982
1038 EXPECT_EQ(0, stream->raw_received_bytes()); 983 EXPECT_EQ(0, stream->raw_received_bytes());
1039 data.RunFor(1); // SYN 984 data.RunFor(1); // SYN
1040 EXPECT_EQ(0, stream->raw_received_bytes()); 985 EXPECT_EQ(0, stream->raw_received_bytes());
1041 data.RunFor(1); // REPLY 986 data.RunFor(1); // REPLY
1042 EXPECT_EQ(reply_frame_len, stream->raw_received_bytes()); 987 EXPECT_EQ(reply_frame_len, stream->raw_received_bytes());
1043 data.RunFor(1); // DATA 988 data.RunFor(1); // DATA
1044 EXPECT_EQ(response_len, stream->raw_received_bytes()); 989 EXPECT_EQ(response_len, stream->raw_received_bytes());
1045 data.RunFor(1); // FIN 990 data.RunFor(1); // FIN
1046 991
1047 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 992 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
1048 } 993 }
1049 994
1050 } // namespace 995 } // namespace
1051 996
1052 } // namespace test 997 } // namespace test
1053 998
1054 } // namespace net 999 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698