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

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

Issue 157803007: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win_x64 compiler error fix Created 6 years, 10 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/quic/quic_connection.cc ('k') | net/quic/quic_fec_group.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 "net/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 631
632 void ProcessClosePacket(QuicPacketSequenceNumber number, 632 void ProcessClosePacket(QuicPacketSequenceNumber number,
633 QuicFecGroupNumber fec_group) { 633 QuicFecGroupNumber fec_group) {
634 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group)); 634 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group));
635 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 635 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
636 ENCRYPTION_NONE, number, *packet)); 636 ENCRYPTION_NONE, number, *packet));
637 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 637 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
638 } 638 }
639 639
640 size_t ProcessFecProtectedPacket(QuicPacketSequenceNumber number, 640 size_t ProcessFecProtectedPacket(QuicPacketSequenceNumber number,
641 bool expect_revival, bool entropy_flag) { 641 bool expect_revival, bool entropy_flag) {
642 if (expect_revival) { 642 if (expect_revival) {
643 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(accept_packet_)); 643 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(accept_packet_));
644 } 644 }
645 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(accept_packet_)) 645 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillOnce(Return(accept_packet_))
646 .RetiresOnSaturation(); 646 .RetiresOnSaturation();
647 return ProcessDataPacket(number, 1, entropy_flag); 647 return ProcessDataPacket(number, 1, entropy_flag);
648 } 648 }
649 649
650 // Processes an FEC packet that covers the packets that would have been 650 // Processes an FEC packet that covers the packets that would have been
651 // received. 651 // received.
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 clock_.AdvanceTime(DefaultRetransmissionTime()); 1840 clock_.AdvanceTime(DefaultRetransmissionTime());
1841 connection_.GetRetransmissionAlarm()->Fire(); 1841 connection_.GetRetransmissionAlarm()->Fire();
1842 1842
1843 // Ack the sent packet before the callback returns, which happens in 1843 // Ack the sent packet before the callback returns, which happens in
1844 // rare circumstances with write blocked sockets. 1844 // rare circumstances with write blocked sockets.
1845 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); 1845 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
1846 QuicAckFrame ack = InitAckFrame(1, 0); 1846 QuicAckFrame ack = InitAckFrame(1, 0);
1847 ProcessAckPacket(&ack); 1847 ProcessAckPacket(&ack);
1848 1848
1849 connection_.OnPacketSent(WriteResult(WRITE_STATUS_OK, 0)); 1849 connection_.OnPacketSent(WriteResult(WRITE_STATUS_OK, 0));
1850 EXPECT_TRUE(connection_.GetRetransmissionAlarm()->IsSet()); 1850 // The retransmission alarm should not be set because there are
1851 // no unacked packets.
1852 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
1851 } 1853 }
1852 1854
1853 TEST_F(QuicConnectionTest, ResumptionAlarmWhenWriteBlocked) { 1855 TEST_F(QuicConnectionTest, ResumptionAlarmWhenWriteBlocked) {
1854 // Block the connection. 1856 // Block the connection.
1855 BlockOnNextWrite(); 1857 BlockOnNextWrite();
1856 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL); 1858 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
1857 EXPECT_EQ(1u, writer_->packets_write_attempts()); 1859 EXPECT_EQ(1u, writer_->packets_write_attempts());
1858 EXPECT_TRUE(writer_->IsWriteBlocked()); 1860 EXPECT_TRUE(writer_->IsWriteBlocked());
1859 1861
1860 // Set the send and resumption alarms. Fire the alarms and ensure they don't 1862 // Set the send and resumption alarms. Fire the alarms and ensure they don't
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1976 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 1978 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
1977 } 1979 }
1978 1980
1979 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) { 1981 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) {
1980 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1982 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1981 1983
1982 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 1984 ProcessFecProtectedPacket(1, false, !kEntropyFlag);
1983 // Don't send missing packet 2. 1985 // Don't send missing packet 2.
1984 ProcessFecProtectedPacket(3, false, !kEntropyFlag); 1986 ProcessFecProtectedPacket(3, false, !kEntropyFlag);
1985 ProcessFecPacket(4, 1, true, kEntropyFlag, NULL); 1987 ProcessFecPacket(4, 1, true, kEntropyFlag, NULL);
1986 // Entropy flag should be true, so entropy should not be 0. 1988 // Ensure QUIC no longer revives entropy for lost packets.
1987 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 1989 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
1990 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 4));
1988 } 1991 }
1989 1992
1990 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) { 1993 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) {
1991 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1994 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1992 1995
1993 // Don't send missing packet 1. 1996 // Don't send missing packet 1.
1994 ProcessFecPacket(3, 1, false, !kEntropyFlag, NULL); 1997 ProcessFecPacket(3, 1, false, !kEntropyFlag, NULL);
1995 // Out of order. 1998 // Out of order.
1996 ProcessFecProtectedPacket(2, true, !kEntropyFlag); 1999 ProcessFecProtectedPacket(2, true, !kEntropyFlag);
1997 // Entropy flag should be false, so entropy should be 0. 2000 // Entropy flag should be false, so entropy should be 0.
1998 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 2001 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
1999 } 2002 }
2000 2003
2001 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) { 2004 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) {
2002 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2005 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2003 2006
2004 ProcessFecProtectedPacket(1, false, !kEntropyFlag); 2007 ProcessFecProtectedPacket(1, false, !kEntropyFlag);
2005 // Don't send missing packet 2. 2008 // Don't send missing packet 2.
2006 ProcessFecPacket(6, 1, false, kEntropyFlag, NULL); 2009 ProcessFecPacket(6, 1, false, kEntropyFlag, NULL);
2007 ProcessFecProtectedPacket(3, false, kEntropyFlag); 2010 ProcessFecProtectedPacket(3, false, kEntropyFlag);
2008 ProcessFecProtectedPacket(4, false, kEntropyFlag); 2011 ProcessFecProtectedPacket(4, false, kEntropyFlag);
2009 ProcessFecProtectedPacket(5, true, !kEntropyFlag); 2012 ProcessFecProtectedPacket(5, true, !kEntropyFlag);
2010 // Entropy flag should be true, so entropy should be 0. 2013 // Ensure entropy is not revived for the missing packet.
2011 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2)); 2014 EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
2015 EXPECT_NE(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 3));
2012 } 2016 }
2013 2017
2014 TEST_F(QuicConnectionTest, RTO) { 2018 TEST_F(QuicConnectionTest, RTO) {
2015 QuicTime default_retransmission_time = clock_.ApproximateNow().Add( 2019 QuicTime default_retransmission_time = clock_.ApproximateNow().Add(
2016 DefaultRetransmissionTime()); 2020 DefaultRetransmissionTime());
2017 SendStreamDataToPeer(3, "foo", 0, !kFin, NULL); 2021 SendStreamDataToPeer(3, "foo", 0, !kFin, NULL);
2018 EXPECT_EQ(1u, outgoing_ack()->sent_info.least_unacked); 2022 EXPECT_EQ(1u, outgoing_ack()->sent_info.least_unacked);
2019 2023
2020 EXPECT_EQ(1u, last_header()->packet_sequence_number); 2024 EXPECT_EQ(1u, last_header()->packet_sequence_number);
2021 EXPECT_EQ(default_retransmission_time, 2025 EXPECT_EQ(default_retransmission_time,
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
2774 TEST_F(QuicConnectionTest, ReceivedEntropyHashCalculation) { 2778 TEST_F(QuicConnectionTest, ReceivedEntropyHashCalculation) {
2775 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillRepeatedly(Return(true)); 2779 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillRepeatedly(Return(true));
2776 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2780 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2777 ProcessDataPacket(1, 1, kEntropyFlag); 2781 ProcessDataPacket(1, 1, kEntropyFlag);
2778 ProcessDataPacket(4, 1, kEntropyFlag); 2782 ProcessDataPacket(4, 1, kEntropyFlag);
2779 ProcessDataPacket(3, 1, !kEntropyFlag); 2783 ProcessDataPacket(3, 1, !kEntropyFlag);
2780 ProcessDataPacket(7, 1, kEntropyFlag); 2784 ProcessDataPacket(7, 1, kEntropyFlag);
2781 EXPECT_EQ(146u, outgoing_ack()->received_info.entropy_hash); 2785 EXPECT_EQ(146u, outgoing_ack()->received_info.entropy_hash);
2782 } 2786 }
2783 2787
2788 TEST_F(QuicConnectionTest, ReceivedEntropyHashCalculationHalfFEC) {
2789 // FEC packets should not change the entropy hash calculation.
2790 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillRepeatedly(Return(true));
2791 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2792 ProcessDataPacket(1, 1, kEntropyFlag);
2793 ProcessFecPacket(4, 1, false, kEntropyFlag, NULL);
2794 ProcessDataPacket(3, 3, !kEntropyFlag);
2795 ProcessFecPacket(7, 3, false, kEntropyFlag, NULL);
2796 EXPECT_EQ(146u, outgoing_ack()->received_info.entropy_hash);
2797 }
2798
2784 TEST_F(QuicConnectionTest, UpdateEntropyForReceivedPackets) { 2799 TEST_F(QuicConnectionTest, UpdateEntropyForReceivedPackets) {
2785 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillRepeatedly(Return(true)); 2800 EXPECT_CALL(visitor_, OnStreamFrames(_)).WillRepeatedly(Return(true));
2786 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 2801 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
2787 ProcessDataPacket(1, 1, kEntropyFlag); 2802 ProcessDataPacket(1, 1, kEntropyFlag);
2788 ProcessDataPacket(5, 1, kEntropyFlag); 2803 ProcessDataPacket(5, 1, kEntropyFlag);
2789 ProcessDataPacket(4, 1, !kEntropyFlag); 2804 ProcessDataPacket(4, 1, !kEntropyFlag);
2790 EXPECT_EQ(34u, outgoing_ack()->received_info.entropy_hash); 2805 EXPECT_EQ(34u, outgoing_ack()->received_info.entropy_hash);
2791 // Make 4th packet my least unacked, and update entropy for 2, 3 packets. 2806 // Make 4th packet my least unacked, and update entropy for 2, 3 packets.
2792 QuicAckFrame ack = InitAckFrame(0, 4); 2807 QuicAckFrame ack = InitAckFrame(0, 4);
2793 QuicPacketEntropyHash kRandomEntropyHash = 129u; 2808 QuicPacketEntropyHash kRandomEntropyHash = 129u;
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
3463 true); 3478 true);
3464 TestConnection client(guid_, IPEndPoint(), helper_.get(), writer_.get(), 3479 TestConnection client(guid_, IPEndPoint(), helper_.get(), writer_.get(),
3465 false); 3480 false);
3466 EXPECT_TRUE(client.sent_packet_manager().using_pacing()); 3481 EXPECT_TRUE(client.sent_packet_manager().using_pacing());
3467 EXPECT_FALSE(server.sent_packet_manager().using_pacing()); 3482 EXPECT_FALSE(server.sent_packet_manager().using_pacing());
3468 } 3483 }
3469 3484
3470 } // namespace 3485 } // namespace
3471 } // namespace test 3486 } // namespace test
3472 } // namespace net 3487 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_fec_group.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698