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

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

Issue 15740018: [SPDY] Change SpdyStream::QueueStreamData() To SendStreamData() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 7 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
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | net/spdy/spdy_stream_spdy3_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <cstddef> 5 #include <cstddef>
6 #include <string> 6 #include <string>
7 7
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_piece.h" 10 #include "base/strings/string_piece.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 134
135 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); 135 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
136 136
137 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 137 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
138 138
139 EXPECT_TRUE(delegate.send_headers_completed()); 139 EXPECT_TRUE(delegate.send_headers_completed());
140 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status")); 140 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status"));
141 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version")); 141 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version"));
142 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 142 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
143 delegate.TakeReceivedData()); 143 delegate.TakeReceivedData());
144 EXPECT_EQ(static_cast<int>(kPostBodyLength), delegate.data_sent()); 144 EXPECT_TRUE(data.at_write_eof());
145 } 145 }
146 146
147 TEST_F(SpdyStreamSpdy2Test, SendHeaderAndDataAfterOpen) { 147 TEST_F(SpdyStreamSpdy2Test, SendHeaderAndDataAfterOpen) {
148 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 148 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
149 149
150 scoped_ptr<SpdyFrame> expected_request(ConstructSpdyWebSocketSynStream( 150 scoped_ptr<SpdyFrame> expected_request(ConstructSpdyWebSocketSynStream(
151 1, 151 1,
152 "/chat", 152 "/chat",
153 "server.example.com", 153 "server.example.com",
154 "http://example.com")); 154 "http://example.com"));
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 (*headers)["origin"] = "http://example.com"; 209 (*headers)["origin"] = "http://example.com";
210 stream->set_spdy_headers(headers.Pass()); 210 stream->set_spdy_headers(headers.Pass());
211 EXPECT_TRUE(stream->HasUrl()); 211 EXPECT_TRUE(stream->HasUrl());
212 212
213 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); 213 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
214 214
215 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 215 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
216 216
217 EXPECT_TRUE(delegate.send_headers_completed()); 217 EXPECT_TRUE(delegate.send_headers_completed());
218 EXPECT_EQ("101", delegate.GetResponseHeaderValue("status")); 218 EXPECT_EQ("101", delegate.GetResponseHeaderValue("status"));
219 EXPECT_EQ(1, delegate.headers_sent());
220 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 219 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
221 EXPECT_EQ(6, delegate.data_sent()); 220 EXPECT_TRUE(data.at_write_eof());
222 } 221 }
223 222
224 TEST_F(SpdyStreamSpdy2Test, PushedStream) { 223 TEST_F(SpdyStreamSpdy2Test, PushedStream) {
225 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 224 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
226 scoped_refptr<SpdySession> spdy_session(CreateSpdySession()); 225 scoped_refptr<SpdySession> spdy_session(CreateSpdySession());
227 226
228 MockRead reads[] = { 227 MockRead reads[] = {
229 MockRead(ASYNC, 0, 0), // EOF 228 MockRead(ASYNC, 0, 0), // EOF
230 }; 229 };
231 230
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 326
328 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 327 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
329 328
330 const SpdyStreamId stream_id = delegate.stream_id(); 329 const SpdyStreamId stream_id = delegate.stream_id();
331 330
332 EXPECT_TRUE(delegate.send_headers_completed()); 331 EXPECT_TRUE(delegate.send_headers_completed());
333 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status")); 332 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status"));
334 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version")); 333 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version"));
335 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 334 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
336 delegate.TakeReceivedData()); 335 delegate.TakeReceivedData());
337 EXPECT_EQ(static_cast<int>(kPostBodyLength), delegate.data_sent()); 336 EXPECT_TRUE(data.at_write_eof());
338 337
339 // Check that the NetLog was filled reasonably. 338 // Check that the NetLog was filled reasonably.
340 net::CapturingNetLog::CapturedEntryList entries; 339 net::CapturingNetLog::CapturedEntryList entries;
341 log.GetEntries(&entries); 340 log.GetEntries(&entries);
342 EXPECT_LT(0u, entries.size()); 341 EXPECT_LT(0u, entries.size());
343 342
344 // Check that we logged SPDY_STREAM_ERROR correctly. 343 // Check that we logged SPDY_STREAM_ERROR correctly.
345 int pos = net::ExpectLogContainsSomewhere( 344 int pos = net::ExpectLogContainsSomewhere(
346 entries, 0, 345 entries, 0,
347 net::NetLog::TYPE_SPDY_STREAM_ERROR, 346 net::NetLog::TYPE_SPDY_STREAM_ERROR,
348 net::NetLog::PHASE_NONE); 347 net::NetLog::PHASE_NONE);
349 348
350 int stream_id2; 349 int stream_id2;
351 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); 350 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2));
352 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); 351 EXPECT_EQ(static_cast<int>(stream_id), stream_id2);
353 } 352 }
354 353
354 // Make sure that large blocks of data are properly split up into
355 // frame-sized chunks for a request/response (i.e., an HTTP-like)
356 // stream.
357 TEST_F(SpdyStreamSpdy2Test, SendLargeDataAfterOpenRequestResponse) {
358 GURL url(kStreamUrl);
359
360 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
361
362 scoped_ptr<SpdyFrame> req(
363 ConstructSpdyPost(kStreamUrl, kPostBodyLength, NULL, 0));
364 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
365 scoped_ptr<SpdyFrame> chunk(
366 ConstructSpdyBodyFrame(
367 1, chunk_data.data(), chunk_data.length(), false));
368 MockWrite writes[] = {
369 CreateMockWrite(*req, 0),
370 CreateMockWrite(*chunk, 1),
371 CreateMockWrite(*chunk, 2),
372 CreateMockWrite(*chunk, 3),
373 };
374
375 scoped_ptr<SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
376 MockRead reads[] = {
377 CreateMockRead(*resp, 4),
378 MockRead(ASYNC, 0, 0, 5), // EOF
379 };
380
381 OrderedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
382 MockConnect connect_data(SYNCHRONOUS, OK);
383 data.set_connect_data(connect_data);
384
385 session_deps_.socket_factory->AddSocketDataProvider(&data);
386
387 scoped_refptr<SpdySession> session(CreateSpdySession());
388
389 InitializeSpdySession(session, host_port_pair_);
390
391 base::WeakPtr<SpdyStream> stream =
392 CreateStreamSynchronously(session, url, LOWEST, BoundNetLog());
393 ASSERT_TRUE(stream.get() != NULL);
394
395 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
396 StreamDelegateWithBody delegate(stream, body_data);
397 stream->SetDelegate(&delegate);
398
399 EXPECT_FALSE(stream->HasUrl());
400
401 stream->set_spdy_headers(
402 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
403 EXPECT_TRUE(stream->HasUrl());
404 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
405
406 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
407
408 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
409
410 EXPECT_TRUE(delegate.send_headers_completed());
411 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status"));
412 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version"));
413 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
414 EXPECT_TRUE(data.at_write_eof());
415 }
416
417 // Make sure that large blocks of data are properly split up into
418 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like)
419 // stream.
420 TEST_F(SpdyStreamSpdy2Test, SendLargeDataAfterOpenBidirectional) {
421 GURL url(kStreamUrl);
422
423 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
424
425 scoped_ptr<SpdyFrame> req(
426 ConstructSpdyPost(kStreamUrl, kPostBodyLength, NULL, 0));
427 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
428 scoped_ptr<SpdyFrame> chunk(
429 ConstructSpdyBodyFrame(
430 1, chunk_data.data(), chunk_data.length(), false));
431 MockWrite writes[] = {
432 CreateMockWrite(*req, 0),
433 CreateMockWrite(*chunk, 2),
434 CreateMockWrite(*chunk, 3),
435 CreateMockWrite(*chunk, 4),
436 };
437
438 scoped_ptr<SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
439 MockRead reads[] = {
440 CreateMockRead(*resp, 1),
441 MockRead(ASYNC, 0, 0, 5), // EOF
442 };
443
444 OrderedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
445 MockConnect connect_data(SYNCHRONOUS, OK);
446 data.set_connect_data(connect_data);
447
448 session_deps_.socket_factory->AddSocketDataProvider(&data);
449
450 scoped_refptr<SpdySession> session(CreateSpdySession());
451
452 InitializeSpdySession(session, host_port_pair_);
453
454 base::WeakPtr<SpdyStream> stream =
455 CreateStreamSynchronously(session, url, LOWEST, BoundNetLog());
456 ASSERT_TRUE(stream.get() != NULL);
457
458 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
459 StreamDelegateSendImmediate delegate(
460 stream, scoped_ptr<SpdyHeaderBlock>(), body_data);
461 stream->SetDelegate(&delegate);
462
463 EXPECT_FALSE(stream->HasUrl());
464
465 stream->set_spdy_headers(
466 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
467 EXPECT_TRUE(stream->HasUrl());
468 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
469
470 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
471
472 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
473
474 EXPECT_TRUE(delegate.send_headers_completed());
475 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status"));
476 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version"));
477 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
478 EXPECT_TRUE(data.at_write_eof());
479 }
480
355 } // namespace 481 } // namespace
356 482
357 } // namespace test 483 } // namespace test
358 484
359 } // namespace net 485 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | net/spdy/spdy_stream_spdy3_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698