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

Side by Side Diff: net/quic/quic_session_test.cc

Issue 324283004: Rename FLAGS_enable_quic_connection_flow_control to FLAGS_enable_quic_connection_flow_control_2, an… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minimizing diffs Created 6 years, 6 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
« no previous file with comments | « net/quic/quic_session.cc ('k') | net/quic/reliable_quic_stream_test.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 "net/quic/quic_session.h" 5 #include "net/quic/quic_session.h"
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 EXPECT_CALL(*stream4, OnCanWrite()); 514 EXPECT_CALL(*stream4, OnCanWrite());
515 session_.OnCanWrite(); 515 session_.OnCanWrite();
516 EXPECT_FALSE(session_.WillingAndAbleToWrite()); 516 EXPECT_FALSE(session_.WillingAndAbleToWrite());
517 } 517 }
518 518
519 TEST_P(QuicSessionTest, OnCanWriteLimitsNumWritesIfFlowControlBlocked) { 519 TEST_P(QuicSessionTest, OnCanWriteLimitsNumWritesIfFlowControlBlocked) {
520 if (version() < QUIC_VERSION_19) { 520 if (version() < QUIC_VERSION_19) {
521 return; 521 return;
522 } 522 }
523 523
524 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 524 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
525 true);
525 // Ensure connection level flow control blockage. 526 // Ensure connection level flow control blockage.
526 QuicFlowControllerPeer::SetSendWindowOffset(session_.flow_controller(), 0); 527 QuicFlowControllerPeer::SetSendWindowOffset(session_.flow_controller(), 0);
527 EXPECT_TRUE(session_.flow_controller()->IsBlocked()); 528 EXPECT_TRUE(session_.flow_controller()->IsBlocked());
528 529
529 // Mark the crypto and headers streams as write blocked, we expect them to be 530 // Mark the crypto and headers streams as write blocked, we expect them to be
530 // allowed to write later. 531 // allowed to write later.
531 session_.MarkWriteBlocked(kCryptoStreamId, kHighestPriority); 532 session_.MarkWriteBlocked(kCryptoStreamId, kHighestPriority);
532 session_.MarkWriteBlocked(kHeadersStreamId, kHighestPriority); 533 session_.MarkWriteBlocked(kHeadersStreamId, kHighestPriority);
533 534
534 // Create a data stream, and although it is write blocked we never expect it 535 // Create a data stream, and although it is write blocked we never expect it
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 SendConnectionClose(QUIC_FLOW_CONTROL_INVALID_WINDOW)).Times(2); 664 SendConnectionClose(QUIC_FLOW_CONTROL_INVALID_WINDOW)).Times(2);
664 session_.OnConfigNegotiated(); 665 session_.OnConfigNegotiated();
665 } 666 }
666 667
667 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingRstOutOfOrder) { 668 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingRstOutOfOrder) {
668 if (version() < QUIC_VERSION_19) { 669 if (version() < QUIC_VERSION_19) {
669 return; 670 return;
670 } 671 }
671 672
672 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true); 673 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true);
673 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 674 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
675 true);
674 // Test that when we receive an out of order stream RST we correctly adjust 676 // Test that when we receive an out of order stream RST we correctly adjust
675 // our connection level flow control receive window. 677 // our connection level flow control receive window.
676 // On close, the stream should mark as consumed all bytes between the highest 678 // On close, the stream should mark as consumed all bytes between the highest
677 // byte consumed so far and the final byte offset from the RST frame. 679 // byte consumed so far and the final byte offset from the RST frame.
678 TestStream* stream = session_.CreateOutgoingDataStream(); 680 TestStream* stream = session_.CreateOutgoingDataStream();
679 681
680 const QuicStreamOffset kByteOffset = 1 + kInitialFlowControlWindowForTest / 2; 682 const QuicStreamOffset kByteOffset = 1 + kInitialFlowControlWindowForTest / 2;
681 // Expect no stream WINDOW_UPDATE frames, as stream read side closed. 683 // Expect no stream WINDOW_UPDATE frames, as stream read side closed.
682 EXPECT_CALL(*connection_, SendWindowUpdate(stream->id(), _)).Times(0); 684 EXPECT_CALL(*connection_, SendWindowUpdate(stream->id(), _)).Times(0);
683 // We do expect a connection level WINDOW_UPDATE when the stream is reset. 685 // We do expect a connection level WINDOW_UPDATE when the stream is reset.
684 EXPECT_CALL(*connection_, 686 EXPECT_CALL(*connection_,
685 SendWindowUpdate( 687 SendWindowUpdate(
686 0, kInitialFlowControlWindowForTest + kByteOffset)).Times(1); 688 0, kInitialFlowControlWindowForTest + kByteOffset)).Times(1);
687 689
688 QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED, 690 QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED,
689 kByteOffset); 691 kByteOffset);
690 session_.OnRstStream(rst_frame); 692 session_.OnRstStream(rst_frame);
691 session_.PostProcessAfterData(); 693 session_.PostProcessAfterData();
692 EXPECT_EQ(kByteOffset, session_.flow_controller()->bytes_consumed()); 694 EXPECT_EQ(kByteOffset, session_.flow_controller()->bytes_consumed());
693 } 695 }
694 696
695 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingFinAndLocalReset) { 697 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingFinAndLocalReset) {
696 if (version() < QUIC_VERSION_19) { 698 if (version() < QUIC_VERSION_19) {
697 return; 699 return;
698 } 700 }
699 701
700 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true); 702 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true);
701 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 703 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
704 true);
702 // Test the situation where we receive a FIN on a stream, and before we fully 705 // Test the situation where we receive a FIN on a stream, and before we fully
703 // consume all the data from the sequencer buffer we locally RST the stream. 706 // consume all the data from the sequencer buffer we locally RST the stream.
704 // The bytes between highest consumed byte, and the final byte offset that we 707 // The bytes between highest consumed byte, and the final byte offset that we
705 // determined when the FIN arrived, should be marked as consumed at the 708 // determined when the FIN arrived, should be marked as consumed at the
706 // connection level flow controller when the stream is reset. 709 // connection level flow controller when the stream is reset.
707 TestStream* stream = session_.CreateOutgoingDataStream(); 710 TestStream* stream = session_.CreateOutgoingDataStream();
708 711
709 const QuicStreamOffset kByteOffset = 1 + kInitialFlowControlWindowForTest / 2; 712 const QuicStreamOffset kByteOffset = 1 + kInitialFlowControlWindowForTest / 2;
710 QuicStreamFrame frame(stream->id(), true, kByteOffset, IOVector()); 713 QuicStreamFrame frame(stream->id(), true, kByteOffset, IOVector());
711 vector<QuicStreamFrame> frames; 714 vector<QuicStreamFrame> frames;
(...skipping 20 matching lines...) Expand all
732 735
733 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingFinAfterRst) { 736 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingFinAfterRst) {
734 // Test that when we RST the stream (and tear down stream state), and then 737 // Test that when we RST the stream (and tear down stream state), and then
735 // receive a FIN from the peer, we correctly adjust our connection level flow 738 // receive a FIN from the peer, we correctly adjust our connection level flow
736 // control receive window. 739 // control receive window.
737 if (version() < QUIC_VERSION_19) { 740 if (version() < QUIC_VERSION_19) {
738 return; 741 return;
739 } 742 }
740 743
741 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true); 744 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true);
742 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 745 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
746 true);
743 // Connection starts with some non-zero highest received byte offset, 747 // Connection starts with some non-zero highest received byte offset,
744 // due to other active streams. 748 // due to other active streams.
745 const uint64 kInitialConnectionBytesConsumed = 567; 749 const uint64 kInitialConnectionBytesConsumed = 567;
746 const uint64 kInitialConnectionHighestReceivedOffset = 1234; 750 const uint64 kInitialConnectionHighestReceivedOffset = 1234;
747 EXPECT_LT(kInitialConnectionBytesConsumed, 751 EXPECT_LT(kInitialConnectionBytesConsumed,
748 kInitialConnectionHighestReceivedOffset); 752 kInitialConnectionHighestReceivedOffset);
749 session_.flow_controller()->UpdateHighestReceivedOffset( 753 session_.flow_controller()->UpdateHighestReceivedOffset(
750 kInitialConnectionHighestReceivedOffset); 754 kInitialConnectionHighestReceivedOffset);
751 session_.flow_controller()->AddBytesConsumed(kInitialConnectionBytesConsumed); 755 session_.flow_controller()->AddBytesConsumed(kInitialConnectionBytesConsumed);
752 756
(...skipping 23 matching lines...) Expand all
776 780
777 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingRstAfterRst) { 781 TEST_P(QuicSessionTest, ConnectionFlowControlAccountingRstAfterRst) {
778 // Test that when we RST the stream (and tear down stream state), and then 782 // Test that when we RST the stream (and tear down stream state), and then
779 // receive a RST from the peer, we correctly adjust our connection level flow 783 // receive a RST from the peer, we correctly adjust our connection level flow
780 // control receive window. 784 // control receive window.
781 if (version() < QUIC_VERSION_19) { 785 if (version() < QUIC_VERSION_19) {
782 return; 786 return;
783 } 787 }
784 788
785 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true); 789 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true);
786 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 790 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
791 true);
787 // Connection starts with some non-zero highest received byte offset, 792 // Connection starts with some non-zero highest received byte offset,
788 // due to other active streams. 793 // due to other active streams.
789 const uint64 kInitialConnectionBytesConsumed = 567; 794 const uint64 kInitialConnectionBytesConsumed = 567;
790 const uint64 kInitialConnectionHighestReceivedOffset = 1234; 795 const uint64 kInitialConnectionHighestReceivedOffset = 1234;
791 EXPECT_LT(kInitialConnectionBytesConsumed, 796 EXPECT_LT(kInitialConnectionBytesConsumed,
792 kInitialConnectionHighestReceivedOffset); 797 kInitialConnectionHighestReceivedOffset);
793 session_.flow_controller()->UpdateHighestReceivedOffset( 798 session_.flow_controller()->UpdateHighestReceivedOffset(
794 kInitialConnectionHighestReceivedOffset); 799 kInitialConnectionHighestReceivedOffset);
795 session_.flow_controller()->AddBytesConsumed(kInitialConnectionBytesConsumed); 800 session_.flow_controller()->AddBytesConsumed(kInitialConnectionBytesConsumed);
796 801
(...skipping 15 matching lines...) Expand all
812 session_.flow_controller()->highest_received_byte_offset()); 817 session_.flow_controller()->highest_received_byte_offset());
813 } 818 }
814 819
815 TEST_P(QuicSessionTest, FlowControlWithInvalidFinalOffset) { 820 TEST_P(QuicSessionTest, FlowControlWithInvalidFinalOffset) {
816 // Test that if we receive a stream RST with a highest byte offset that 821 // Test that if we receive a stream RST with a highest byte offset that
817 // violates flow control, that we close the connection. 822 // violates flow control, that we close the connection.
818 if (version() < QUIC_VERSION_17) { 823 if (version() < QUIC_VERSION_17) {
819 return; 824 return;
820 } 825 }
821 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true); 826 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true);
822 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 827 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
828 true);
823 829
824 const uint64 kLargeOffset = kInitialFlowControlWindowForTest + 1; 830 const uint64 kLargeOffset = kInitialFlowControlWindowForTest + 1;
825 EXPECT_CALL(*connection_, 831 EXPECT_CALL(*connection_,
826 SendConnectionClose(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA)) 832 SendConnectionClose(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA))
827 .Times(2); 833 .Times(2);
828 834
829 // Check that stream frame + FIN results in connection close. 835 // Check that stream frame + FIN results in connection close.
830 TestStream* stream = session_.CreateOutgoingDataStream(); 836 TestStream* stream = session_.CreateOutgoingDataStream();
831 stream->Reset(QUIC_STREAM_CANCELLED); 837 stream->Reset(QUIC_STREAM_CANCELLED);
832 QuicStreamFrame frame(stream->id(), true, kLargeOffset, IOVector()); 838 QuicStreamFrame frame(stream->id(), true, kLargeOffset, IOVector());
833 vector<QuicStreamFrame> frames; 839 vector<QuicStreamFrame> frames;
834 frames.push_back(frame); 840 frames.push_back(frame);
835 session_.OnStreamFrames(frames); 841 session_.OnStreamFrames(frames);
836 842
837 // Check that RST results in connection close. 843 // Check that RST results in connection close.
838 QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED, 844 QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED,
839 kLargeOffset); 845 kLargeOffset);
840 session_.OnRstStream(rst_frame); 846 session_.OnRstStream(rst_frame);
841 } 847 }
842 848
843 TEST_P(QuicSessionTest, VersionNegotiationDisablesFlowControl) { 849 TEST_P(QuicSessionTest, VersionNegotiationDisablesFlowControl) {
844 if (version() < QUIC_VERSION_19) { 850 if (version() < QUIC_VERSION_19) {
845 return; 851 return;
846 } 852 }
847 853
848 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true); 854 ValueRestore<bool> old_flag2(&FLAGS_enable_quic_stream_flow_control_2, true);
849 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control, true); 855 ValueRestore<bool> old_flag(&FLAGS_enable_quic_connection_flow_control_2,
856 true);
850 // Test that after successful version negotiation, flow control is disabled 857 // Test that after successful version negotiation, flow control is disabled
851 // appropriately at both the connection and stream level. 858 // appropriately at both the connection and stream level.
852 859
853 // Initially both stream and connection flow control are enabled. 860 // Initially both stream and connection flow control are enabled.
854 TestStream* stream = session_.CreateOutgoingDataStream(); 861 TestStream* stream = session_.CreateOutgoingDataStream();
855 EXPECT_TRUE(stream->flow_controller()->IsEnabled()); 862 EXPECT_TRUE(stream->flow_controller()->IsEnabled());
856 EXPECT_TRUE(session_.flow_controller()->IsEnabled()); 863 EXPECT_TRUE(session_.flow_controller()->IsEnabled());
857 864
858 // Version 17 implies that stream flow control is enabled, but connection 865 // Version 17 implies that stream flow control is enabled, but connection
859 // level is disabled. 866 // level is disabled.
860 session_.OnSuccessfulVersionNegotiation(QUIC_VERSION_17); 867 session_.OnSuccessfulVersionNegotiation(QUIC_VERSION_17);
861 EXPECT_FALSE(session_.flow_controller()->IsEnabled()); 868 EXPECT_FALSE(session_.flow_controller()->IsEnabled());
862 EXPECT_TRUE(stream->flow_controller()->IsEnabled()); 869 EXPECT_TRUE(stream->flow_controller()->IsEnabled());
863 870
864 // Version 16 means all flow control is disabled. 871 // Version 16 means all flow control is disabled.
865 session_.OnSuccessfulVersionNegotiation(QUIC_VERSION_16); 872 session_.OnSuccessfulVersionNegotiation(QUIC_VERSION_16);
866 EXPECT_FALSE(session_.flow_controller()->IsEnabled()); 873 EXPECT_FALSE(session_.flow_controller()->IsEnabled());
867 EXPECT_FALSE(stream->flow_controller()->IsEnabled()); 874 EXPECT_FALSE(stream->flow_controller()->IsEnabled());
868 } 875 }
869 876
870 } // namespace 877 } // namespace
871 } // namespace test 878 } // namespace test
872 } // namespace net 879 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_session.cc ('k') | net/quic/reliable_quic_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698