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

Side by Side Diff: net/spdy/spdy_stream_spdy3_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_spdy2_unittest.cc ('k') | net/spdy/spdy_stream_test_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/strings/string_piece.h" 9 #include "base/strings/string_piece.h"
10 #include "net/base/completion_callback.h" 10 #include "net/base/completion_callback.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 143
144 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); 144 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
145 145
146 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 146 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
147 147
148 EXPECT_TRUE(delegate.send_headers_completed()); 148 EXPECT_TRUE(delegate.send_headers_completed());
149 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); 149 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
150 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version")); 150 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version"));
151 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 151 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
152 delegate.TakeReceivedData()); 152 delegate.TakeReceivedData());
153 EXPECT_EQ(static_cast<int>(kPostBodyLength), delegate.data_sent()); 153 EXPECT_TRUE(data.at_write_eof());
154 } 154 }
155 155
156 TEST_F(SpdyStreamSpdy3Test, SendHeaderAndDataAfterOpen) { 156 TEST_F(SpdyStreamSpdy3Test, SendHeaderAndDataAfterOpen) {
157 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 157 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
158 158
159 scoped_ptr<SpdyFrame> expected_request(ConstructSpdyWebSocketSynStream( 159 scoped_ptr<SpdyFrame> expected_request(ConstructSpdyWebSocketSynStream(
160 1, 160 1,
161 "/chat", 161 "/chat",
162 "server.example.com", 162 "server.example.com",
163 "http://example.com")); 163 "http://example.com"));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 (*headers)[":origin"] = "http://example.com"; 219 (*headers)[":origin"] = "http://example.com";
220 stream->set_spdy_headers(headers.Pass()); 220 stream->set_spdy_headers(headers.Pass());
221 EXPECT_TRUE(stream->HasUrl()); 221 EXPECT_TRUE(stream->HasUrl());
222 222
223 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); 223 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
224 224
225 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 225 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
226 226
227 EXPECT_TRUE(delegate.send_headers_completed()); 227 EXPECT_TRUE(delegate.send_headers_completed());
228 EXPECT_EQ("101", delegate.GetResponseHeaderValue(":status")); 228 EXPECT_EQ("101", delegate.GetResponseHeaderValue(":status"));
229 EXPECT_EQ(1, delegate.headers_sent());
230 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 229 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
231 EXPECT_EQ(6, delegate.data_sent()); 230 EXPECT_TRUE(data.at_write_eof());
232 } 231 }
233 232
234 TEST_F(SpdyStreamSpdy3Test, PushedStream) { 233 TEST_F(SpdyStreamSpdy3Test, PushedStream) {
235 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 234 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
236 scoped_refptr<SpdySession> spdy_session(CreateSpdySession()); 235 scoped_refptr<SpdySession> spdy_session(CreateSpdySession());
237 236
238 MockRead reads[] = { 237 MockRead reads[] = {
239 MockRead(ASYNC, 0, 0), // EOF 238 MockRead(ASYNC, 0, 0), // EOF
240 }; 239 };
241 240
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 339
341 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 340 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
342 341
343 const SpdyStreamId stream_id = delegate.stream_id(); 342 const SpdyStreamId stream_id = delegate.stream_id();
344 343
345 EXPECT_TRUE(delegate.send_headers_completed()); 344 EXPECT_TRUE(delegate.send_headers_completed());
346 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); 345 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
347 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version")); 346 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version"));
348 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 347 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
349 delegate.TakeReceivedData()); 348 delegate.TakeReceivedData());
350 EXPECT_EQ(static_cast<int>(kPostBodyLength), delegate.data_sent()); 349 EXPECT_TRUE(data.at_write_eof());
351 350
352 // Check that the NetLog was filled reasonably. 351 // Check that the NetLog was filled reasonably.
353 net::CapturingNetLog::CapturedEntryList entries; 352 net::CapturingNetLog::CapturedEntryList entries;
354 log.GetEntries(&entries); 353 log.GetEntries(&entries);
355 EXPECT_LT(0u, entries.size()); 354 EXPECT_LT(0u, entries.size());
356 355
357 // Check that we logged SPDY_STREAM_ERROR correctly. 356 // Check that we logged SPDY_STREAM_ERROR correctly.
358 int pos = net::ExpectLogContainsSomewhere( 357 int pos = net::ExpectLogContainsSomewhere(
359 entries, 0, 358 entries, 0,
360 net::NetLog::TYPE_SPDY_STREAM_ERROR, 359 net::NetLog::TYPE_SPDY_STREAM_ERROR,
361 net::NetLog::PHASE_NONE); 360 net::NetLog::PHASE_NONE);
362 361
363 int stream_id2; 362 int stream_id2;
364 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); 363 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2));
365 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); 364 EXPECT_EQ(static_cast<int>(stream_id), stream_id2);
366 } 365 }
367 366
367 // Make sure that large blocks of data are properly split up into
368 // frame-sized chunks for a request/response (i.e., an HTTP-like)
369 // stream.
370 TEST_F(SpdyStreamSpdy3Test, SendLargeDataAfterOpenRequestResponse) {
371 GURL url(kStreamUrl);
372
373 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
374
375 scoped_ptr<SpdyFrame> req(
376 ConstructSpdyPost(kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
377 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
378 scoped_ptr<SpdyFrame> chunk(
379 ConstructSpdyBodyFrame(
380 1, chunk_data.data(), chunk_data.length(), false));
381 MockWrite writes[] = {
382 CreateMockWrite(*req, 0),
383 CreateMockWrite(*chunk, 1),
384 CreateMockWrite(*chunk, 2),
385 CreateMockWrite(*chunk, 3),
386 };
387
388 scoped_ptr<SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
389 MockRead reads[] = {
390 CreateMockRead(*resp, 4),
391 MockRead(ASYNC, 0, 0, 5), // EOF
392 };
393
394 OrderedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
395 MockConnect connect_data(SYNCHRONOUS, OK);
396 data.set_connect_data(connect_data);
397
398 session_deps_.socket_factory->AddSocketDataProvider(&data);
399
400 scoped_refptr<SpdySession> session(CreateSpdySession());
401
402 InitializeSpdySession(session, host_port_pair_);
403
404 base::WeakPtr<SpdyStream> stream =
405 CreateStreamSynchronously(session, url, LOWEST, BoundNetLog());
406 ASSERT_TRUE(stream.get() != NULL);
407
408 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
409 StreamDelegateWithBody delegate(stream, body_data);
410 stream->SetDelegate(&delegate);
411
412 EXPECT_FALSE(stream->HasUrl());
413
414 stream->set_spdy_headers(
415 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
416 EXPECT_TRUE(stream->HasUrl());
417 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
418
419 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
420
421 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
422
423 EXPECT_TRUE(delegate.send_headers_completed());
424 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
425 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version"));
426 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
427 EXPECT_TRUE(data.at_write_eof());
428 }
429
430 // Make sure that large blocks of data are properly split up into
431 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like)
432 // stream.
433 TEST_F(SpdyStreamSpdy3Test, SendLargeDataAfterOpenBidirectional) {
434 GURL url(kStreamUrl);
435
436 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
437
438 scoped_ptr<SpdyFrame> req(
439 ConstructSpdyPost(kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
440 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
441 scoped_ptr<SpdyFrame> chunk(
442 ConstructSpdyBodyFrame(
443 1, chunk_data.data(), chunk_data.length(), false));
444 MockWrite writes[] = {
445 CreateMockWrite(*req, 0),
446 CreateMockWrite(*chunk, 2),
447 CreateMockWrite(*chunk, 3),
448 CreateMockWrite(*chunk, 4),
449 };
450
451 scoped_ptr<SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
452 MockRead reads[] = {
453 CreateMockRead(*resp, 1),
454 MockRead(ASYNC, 0, 0, 5), // EOF
455 };
456
457 OrderedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
458 MockConnect connect_data(SYNCHRONOUS, OK);
459 data.set_connect_data(connect_data);
460
461 session_deps_.socket_factory->AddSocketDataProvider(&data);
462
463 scoped_refptr<SpdySession> session(CreateSpdySession());
464
465 InitializeSpdySession(session, host_port_pair_);
466
467 base::WeakPtr<SpdyStream> stream =
468 CreateStreamSynchronously(session, url, LOWEST, BoundNetLog());
469 ASSERT_TRUE(stream.get() != NULL);
470
471 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x');
472 StreamDelegateSendImmediate delegate(
473 stream, scoped_ptr<SpdyHeaderBlock>(), body_data);
474 stream->SetDelegate(&delegate);
475
476 EXPECT_FALSE(stream->HasUrl());
477
478 stream->set_spdy_headers(
479 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
480 EXPECT_TRUE(stream->HasUrl());
481 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
482
483 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
484
485 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
486
487 EXPECT_TRUE(delegate.send_headers_completed());
488 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
489 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version"));
490 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
491 EXPECT_TRUE(data.at_write_eof());
492 }
493
368 // Call IncreaseSendWindowSize on a stream with a large enough delta 494 // Call IncreaseSendWindowSize on a stream with a large enough delta
369 // to overflow an int32. The SpdyStream should handle that case 495 // to overflow an int32. The SpdyStream should handle that case
370 // gracefully. 496 // gracefully.
371 TEST_F(SpdyStreamSpdy3Test, IncreaseSendWindowSizeOverflow) { 497 TEST_F(SpdyStreamSpdy3Test, IncreaseSendWindowSizeOverflow) {
372 session_ = 498 session_ =
373 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 499 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
374 500
375 MockRead reads[] = { 501 MockRead reads[] = {
376 MockRead(ASYNC, 0, 2), // EOF 502 MockRead(ASYNC, 0, 2), // EOF
377 }; 503 };
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 EXPECT_FALSE(stream->send_stalled_by_flow_control()); 649 EXPECT_FALSE(stream->send_stalled_by_flow_control());
524 650
525 data.RunFor(3); 651 data.RunFor(3);
526 652
527 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 653 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
528 654
529 EXPECT_TRUE(delegate.send_headers_completed()); 655 EXPECT_TRUE(delegate.send_headers_completed());
530 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); 656 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
531 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version")); 657 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version"));
532 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 658 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
533 EXPECT_EQ(static_cast<int>(kPostBodyLength), delegate.body_data_sent()); 659 EXPECT_TRUE(data.at_write_eof());
534 } 660 }
535 661
536 TEST_F(SpdyStreamSpdy3Test, ResumeAfterSendWindowSizeIncreaseRequestResponse) { 662 TEST_F(SpdyStreamSpdy3Test, ResumeAfterSendWindowSizeIncreaseRequestResponse) {
537 RunResumeAfterUnstallRequestResponseTest( 663 RunResumeAfterUnstallRequestResponseTest(
538 base::Bind(&IncreaseStreamSendWindowSize)); 664 base::Bind(&IncreaseStreamSendWindowSize));
539 } 665 }
540 666
541 TEST_F(SpdyStreamSpdy3Test, ResumeAfterSendWindowSizeAdjustRequestResponse) { 667 TEST_F(SpdyStreamSpdy3Test, ResumeAfterSendWindowSizeAdjustRequestResponse) {
542 RunResumeAfterUnstallRequestResponseTest( 668 RunResumeAfterUnstallRequestResponseTest(
543 base::Bind(&AdjustStreamSendWindowSize)); 669 base::Bind(&AdjustStreamSendWindowSize));
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 741
616 data.RunFor(3); 742 data.RunFor(3);
617 743
618 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 744 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
619 745
620 EXPECT_TRUE(delegate.send_headers_completed()); 746 EXPECT_TRUE(delegate.send_headers_completed());
621 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); 747 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status"));
622 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version")); 748 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue(":version"));
623 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 749 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
624 delegate.TakeReceivedData()); 750 delegate.TakeReceivedData());
625 EXPECT_EQ(static_cast<int>(kPostBodyLength), delegate.data_sent()); 751 EXPECT_TRUE(data.at_write_eof());
626 } 752 }
627 753
628 // TODO(akalin): Re-enable these when http://crbug.com/242288 is 754 TEST_F(SpdyStreamSpdy3Test, ResumeAfterSendWindowSizeIncreaseBidirectional) {
629 // fixed.
630 TEST_F(SpdyStreamSpdy3Test,
631 DISABLED_ResumeAfterSendWindowSizeIncreaseBidirectional) {
632 RunResumeAfterUnstallBidirectionalTest( 755 RunResumeAfterUnstallBidirectionalTest(
633 base::Bind(&IncreaseStreamSendWindowSize)); 756 base::Bind(&IncreaseStreamSendWindowSize));
634 } 757 }
635 758
636 TEST_F(SpdyStreamSpdy3Test, 759 TEST_F(SpdyStreamSpdy3Test, ResumeAfterSendWindowSizeAdjustBidirectional) {
637 DISABLED_ResumeAfterSendWindowSizeAdjustBidirectional) {
638 RunResumeAfterUnstallBidirectionalTest( 760 RunResumeAfterUnstallBidirectionalTest(
639 base::Bind(&AdjustStreamSendWindowSize)); 761 base::Bind(&AdjustStreamSendWindowSize));
640 } 762 }
641 763
642 } // namespace 764 } // namespace
643 765
644 } // namespace test 766 } // namespace test
645 767
646 } // namespace net 768 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_stream_spdy2_unittest.cc ('k') | net/spdy/spdy_stream_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698