| Index: net/quic/quic_connection_test.cc
|
| diff --git a/net/quic/quic_connection_test.cc b/net/quic/quic_connection_test.cc
|
| index 603680fc1c4d83165c5bbd38927f8e17c47e6024..6707c4ad1d024ef74b533eba827f41c3bb0384b6 100644
|
| --- a/net/quic/quic_connection_test.cc
|
| +++ b/net/quic/quic_connection_test.cc
|
| @@ -556,7 +556,7 @@ class TestConnection : public QuicConnection {
|
|
|
| // Used for testing packets revived from FEC packets.
|
| class FecQuicConnectionDebugVisitor
|
| - : public QuicConnectionDebugVisitorInterface {
|
| + : public QuicConnectionDebugVisitor {
|
| public:
|
| virtual void OnRevivedPacket(const QuicPacketHeader& header,
|
| StringPiece data) OVERRIDE {
|
| @@ -577,7 +577,7 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
|
| QuicConnectionTest()
|
| : connection_id_(42),
|
| framer_(SupportedVersions(version()), QuicTime::Zero(), false),
|
| - creator_(connection_id_, &framer_, &random_generator_, false),
|
| + peer_creator_(connection_id_, &framer_, &random_generator_, false),
|
| send_algorithm_(new StrictMock<MockSendAlgorithm>),
|
| loss_algorithm_(new MockLossAlgorithm()),
|
| helper_(new TestConnectionHelper(&clock_, &random_generator_)),
|
| @@ -652,9 +652,10 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
|
| QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) {
|
| QuicFrames frames;
|
| frames.push_back(QuicFrame(frame));
|
| - QuicPacketCreatorPeer::SetSendVersionInPacket(&creator_,
|
| + QuicPacketCreatorPeer::SetSendVersionInPacket(&peer_creator_,
|
| connection_.is_server());
|
| - SerializedPacket serialized_packet = creator_.SerializeAllFrames(frames);
|
| + SerializedPacket serialized_packet =
|
| + peer_creator_.SerializeAllFrames(frames);
|
| scoped_ptr<QuicPacket> packet(serialized_packet.packet);
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE,
|
| @@ -816,7 +817,7 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
|
| QuicFrame frame(&frame1_);
|
| frames.push_back(frame);
|
| QuicPacket* packet =
|
| - framer_.BuildUnsizedDataPacket(header_, frames).packet;
|
| + BuildUnsizedDataPacket(&framer_, header_, frames).packet;
|
| EXPECT_TRUE(packet != NULL);
|
| return packet;
|
| }
|
| @@ -839,7 +840,7 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
|
| QuicFrame frame(&qccf);
|
| frames.push_back(frame);
|
| QuicPacket* packet =
|
| - framer_.BuildUnsizedDataPacket(header_, frames).packet;
|
| + BuildUnsizedDataPacket(&framer_, header_, frames).packet;
|
| EXPECT_TRUE(packet != NULL);
|
| return packet;
|
| }
|
| @@ -913,9 +914,21 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
|
| EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1));
|
| }
|
|
|
| + void CongestionBlockWrites() {
|
| + EXPECT_CALL(*send_algorithm_,
|
| + TimeUntilSend(_, _, _)).WillRepeatedly(
|
| + testing::Return(QuicTime::Delta::FromSeconds(1)));
|
| + }
|
| +
|
| + void CongestionUnblockWrites() {
|
| + EXPECT_CALL(*send_algorithm_,
|
| + TimeUntilSend(_, _, _)).WillRepeatedly(
|
| + testing::Return(QuicTime::Delta::Zero()));
|
| + }
|
| +
|
| QuicConnectionId connection_id_;
|
| QuicFramer framer_;
|
| - QuicPacketCreator creator_;
|
| + QuicPacketCreator peer_creator_;
|
| MockEntropyCalculator entropy_calculator_;
|
|
|
| MockSendAlgorithm* send_algorithm_;
|
| @@ -1016,7 +1029,7 @@ TEST_P(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndLeastAwaiting) {
|
| // packet the peer will not retransmit. It indicates this by sending 'least
|
| // awaiting' is 4. The connection should then realize 1 will not be
|
| // retransmitted, and will remove it from the missing list.
|
| - creator_.set_sequence_number(5);
|
| + peer_creator_.set_sequence_number(5);
|
| QuicAckFrame frame = InitAckFrame(1, 4);
|
| EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _));
|
| ProcessAckPacket(&frame);
|
| @@ -1109,7 +1122,7 @@ TEST_P(QuicConnectionTest, AckReceiptCausesAckSendBadEntropy) {
|
| TimeUntilSend(_, _, _)).WillRepeatedly(
|
| testing::Return(QuicTime::Delta::Zero()));
|
| // Skip a packet and then record an ack.
|
| - creator_.set_sequence_number(2);
|
| + peer_creator_.set_sequence_number(2);
|
| QuicAckFrame frame = InitAckFrame(0, 3);
|
| ProcessAckPacket(&frame);
|
| }
|
| @@ -1205,7 +1218,7 @@ TEST_P(QuicConnectionTest, LeastUnackedLower) {
|
| SendStreamDataToPeer(1, "eep", 6, !kFin, NULL);
|
|
|
| // Start out saying the least unacked is 2.
|
| - creator_.set_sequence_number(5);
|
| + peer_creator_.set_sequence_number(5);
|
| if (version() > QUIC_VERSION_15) {
|
| QuicStopWaitingFrame frame = InitStopWaitingFrame(2);
|
| ProcessStopWaitingPacket(&frame);
|
| @@ -1216,7 +1229,7 @@ TEST_P(QuicConnectionTest, LeastUnackedLower) {
|
|
|
| // Change it to 1, but lower the sequence number to fake out-of-order packets.
|
| // This should be fine.
|
| - creator_.set_sequence_number(1);
|
| + peer_creator_.set_sequence_number(1);
|
| // The scheduler will not process out of order acks, but all packet processing
|
| // causes the connection to try to write.
|
| EXPECT_CALL(visitor_, OnCanWrite());
|
| @@ -1231,7 +1244,7 @@ TEST_P(QuicConnectionTest, LeastUnackedLower) {
|
| // Now claim it's one, but set the ordering so it was sent "after" the first
|
| // one. This should cause a connection error.
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
|
| - creator_.set_sequence_number(7);
|
| + peer_creator_.set_sequence_number(7);
|
| if (version() > QUIC_VERSION_15) {
|
| EXPECT_CALL(visitor_,
|
| OnConnectionClosed(QUIC_INVALID_STOP_WAITING_DATA, false));
|
| @@ -1277,17 +1290,19 @@ TEST_P(QuicConnectionTest, AckAll) {
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| ProcessPacket(1);
|
|
|
| - creator_.set_sequence_number(1);
|
| + peer_creator_.set_sequence_number(1);
|
| QuicAckFrame frame1 = InitAckFrame(0, 1);
|
| ProcessAckPacket(&frame1);
|
| }
|
|
|
| TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
|
| QuicPacketSequenceNumber last_packet;
|
| + QuicPacketCreator* creator =
|
| + QuicConnectionPeer::GetPacketCreator(&connection_);
|
| SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet);
|
| EXPECT_EQ(1u, last_packet);
|
| EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| @@ -1297,7 +1312,7 @@ TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
|
| SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet);
|
| EXPECT_EQ(2u, last_packet);
|
| EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| // The 1 packet lag is due to the sequence number length being recalculated in
|
| // QuicConnection after a packet is sent.
|
| EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
|
| @@ -1309,7 +1324,7 @@ TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
|
| SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet);
|
| EXPECT_EQ(3u, last_packet);
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| @@ -1319,7 +1334,7 @@ TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
|
| SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet);
|
| EXPECT_EQ(4u, last_packet);
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| @@ -1329,52 +1344,51 @@ TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
|
| SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet);
|
| EXPECT_EQ(5u, last_packet);
|
| EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
| }
|
|
|
| TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsUnackedDelta) {
|
| QuicPacketSequenceNumber last_packet;
|
| + QuicPacketCreator* creator =
|
| + QuicConnectionPeer::GetPacketCreator(&connection_);
|
| SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet);
|
| EXPECT_EQ(1u, last_packet);
|
| EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| - QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(100);
|
| + creator->set_sequence_number(100);
|
|
|
| SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet);
|
| EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| - QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(
|
| - 100 * 256);
|
| + creator->set_sequence_number(100 * 256);
|
|
|
| SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet);
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| - QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(
|
| - 100 * 256 * 256);
|
| + creator->set_sequence_number(100 * 256 * 256);
|
|
|
| SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet);
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
|
|
| - QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(
|
| - 100 * 256 * 256 * 256);
|
| + creator->set_sequence_number(100 * 256 * 256 * 256);
|
|
|
| SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet);
|
| EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
|
| - connection_.options()->send_sequence_number_length);
|
| + creator->next_sequence_number_length());
|
| EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
|
| writer_->header().public_header.sequence_number_length);
|
| }
|
| @@ -1432,18 +1446,21 @@ TEST_P(QuicConnectionTest, BasicSending) {
|
|
|
| TEST_P(QuicConnectionTest, FECSending) {
|
| // All packets carry version info till version is negotiated.
|
| + QuicPacketCreator* creator =
|
| + QuicConnectionPeer::GetPacketCreator(&connection_);
|
| size_t payload_length;
|
| // GetPacketLengthForOneStream() assumes a stream offset of 0 in determining
|
| // packet length. The size of the offset field in a stream frame is 0 for
|
| - // offset 0, and 2 for non-zero offsets up through 16K. Increase
|
| + // offset 0, and 2 for non-zero offsets up through 64K. Increase
|
| // max_packet_length by 2 so that subsequent packets containing subsequent
|
| // stream frames with non-zero offets will fit within the packet length.
|
| - connection_.options()->max_packet_length = 2 + GetPacketLengthForOneStream(
|
| + size_t length = 2 + GetPacketLengthForOneStream(
|
| connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
|
| IN_FEC_GROUP, &payload_length);
|
| + creator->set_max_packet_length(length);
|
| +
|
| // And send FEC every two packets.
|
| - EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(
|
| - QuicConnectionPeer::GetPacketCreator(&connection_), 2));
|
| + EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(creator, 2));
|
|
|
| // Send 4 data packets and 2 FEC packets.
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(6);
|
| @@ -1451,25 +1468,28 @@ TEST_P(QuicConnectionTest, FECSending) {
|
| const string payload(payload_length * 4 + 2, 'a');
|
| connection_.SendStreamDataWithString(1, payload, 0, !kFin, NULL);
|
| // Expect the FEC group to be closed after SendStreamDataWithString.
|
| - EXPECT_FALSE(creator_.ShouldSendFec(true));
|
| + EXPECT_FALSE(creator->ShouldSendFec(true));
|
| + EXPECT_TRUE(creator->IsFecProtected());
|
| }
|
|
|
| TEST_P(QuicConnectionTest, FECQueueing) {
|
| // All packets carry version info till version is negotiated.
|
| size_t payload_length;
|
| - connection_.options()->max_packet_length =
|
| - GetPacketLengthForOneStream(
|
| - connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
|
| - IN_FEC_GROUP, &payload_length);
|
| + QuicPacketCreator* creator =
|
| + QuicConnectionPeer::GetPacketCreator(&connection_);
|
| + size_t length = GetPacketLengthForOneStream(
|
| + connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
|
| + IN_FEC_GROUP, &payload_length);
|
| + creator->set_max_packet_length(length);
|
| // And send FEC every two packets.
|
| - EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(
|
| - QuicConnectionPeer::GetPacketCreator(&connection_), 2));
|
| + EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(creator, 2));
|
|
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
| BlockOnNextWrite();
|
| const string payload(payload_length, 'a');
|
| connection_.SendStreamDataWithString(1, payload, 0, !kFin, NULL);
|
| - EXPECT_FALSE(creator_.ShouldSendFec(true));
|
| + EXPECT_FALSE(creator->ShouldSendFec(true));
|
| + EXPECT_TRUE(creator->IsFecProtected());
|
| // Expect the first data packet and the fec packet to be queued.
|
| EXPECT_EQ(2u, connection_.NumQueuedPackets());
|
| }
|
| @@ -1560,9 +1580,7 @@ TEST_P(QuicConnectionTest, AbandonAllFEC) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, FramePacking) {
|
| - // Block the connection.
|
| - connection_.GetSendAlarm()->Set(
|
| - clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(1)));
|
| + CongestionBlockWrites();
|
|
|
| // Send an ack and two stream frames in 1 packet by queueing them.
|
| connection_.SendAck();
|
| @@ -1573,7 +1591,7 @@ TEST_P(QuicConnectionTest, FramePacking) {
|
| &TestConnection::SendStreamData5))));
|
|
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
|
| - // Unblock the connection.
|
| + CongestionUnblockWrites();
|
| connection_.GetSendAlarm()->Fire();
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
| EXPECT_FALSE(connection_.HasQueuedData());
|
| @@ -1587,15 +1605,13 @@ TEST_P(QuicConnectionTest, FramePacking) {
|
| EXPECT_EQ(3u, writer_->frame_count());
|
| }
|
| EXPECT_FALSE(writer_->ack_frames().empty());
|
| - EXPECT_EQ(2u, writer_->stream_frames().size());
|
| + ASSERT_EQ(2u, writer_->stream_frames().size());
|
| EXPECT_EQ(kClientDataStreamId1, writer_->stream_frames()[0].stream_id);
|
| EXPECT_EQ(kClientDataStreamId2, writer_->stream_frames()[1].stream_id);
|
| }
|
|
|
| TEST_P(QuicConnectionTest, FramePackingNonCryptoThenCrypto) {
|
| - // Block the connection.
|
| - connection_.GetSendAlarm()->Set(
|
| - clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(1)));
|
| + CongestionBlockWrites();
|
|
|
| // Send an ack and two stream frames (one non-crypto, then one crypto) in 2
|
| // packets by queueing them.
|
| @@ -1607,21 +1623,19 @@ TEST_P(QuicConnectionTest, FramePackingNonCryptoThenCrypto) {
|
| &TestConnection::SendCryptoStreamData))));
|
|
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
|
| - // Unblock the connection.
|
| + CongestionUnblockWrites();
|
| connection_.GetSendAlarm()->Fire();
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
| EXPECT_FALSE(connection_.HasQueuedData());
|
|
|
| // Parse the last packet and ensure it's the crypto stream frame.
|
| EXPECT_EQ(1u, writer_->frame_count());
|
| - EXPECT_EQ(1u, writer_->stream_frames().size());
|
| + ASSERT_EQ(1u, writer_->stream_frames().size());
|
| EXPECT_EQ(kCryptoStreamId, writer_->stream_frames()[0].stream_id);
|
| }
|
|
|
| TEST_P(QuicConnectionTest, FramePackingCryptoThenNonCrypto) {
|
| - // Block the connection.
|
| - connection_.GetSendAlarm()->Set(
|
| - clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(1)));
|
| + CongestionBlockWrites();
|
|
|
| // Send an ack and two stream frames (one crypto, then one non-crypto) in 3
|
| // packets by queueing them.
|
| @@ -1633,28 +1647,23 @@ TEST_P(QuicConnectionTest, FramePackingCryptoThenNonCrypto) {
|
| &TestConnection::SendStreamData3))));
|
|
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(3);
|
| - // Unblock the connection.
|
| + CongestionUnblockWrites();
|
| connection_.GetSendAlarm()->Fire();
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
| EXPECT_FALSE(connection_.HasQueuedData());
|
|
|
| // Parse the last packet and ensure it's the stream frame from stream 3.
|
| EXPECT_EQ(1u, writer_->frame_count());
|
| - EXPECT_EQ(1u, writer_->stream_frames().size());
|
| + ASSERT_EQ(1u, writer_->stream_frames().size());
|
| EXPECT_EQ(kClientDataStreamId1, writer_->stream_frames()[0].stream_id);
|
| }
|
|
|
| TEST_P(QuicConnectionTest, FramePackingFEC) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| // Enable fec.
|
| EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(
|
| QuicConnectionPeer::GetPacketCreator(&connection_), 6));
|
|
|
| - // Block the connection.
|
| - connection_.GetSendAlarm()->Set(
|
| - clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(1)));
|
| + CongestionBlockWrites();
|
|
|
| // Send an ack and two stream frames in 1 packet by queueing them.
|
| connection_.SendAck();
|
| @@ -1665,7 +1674,7 @@ TEST_P(QuicConnectionTest, FramePackingFEC) {
|
| &TestConnection::SendStreamData5))));
|
|
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
|
| - // Unblock the connection.
|
| + CongestionUnblockWrites();
|
| connection_.GetSendAlarm()->Fire();
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
| EXPECT_FALSE(connection_.HasQueuedData());
|
| @@ -1690,7 +1699,7 @@ TEST_P(QuicConnectionTest, FramePackingAckResponse) {
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
|
|
|
| // Process an ack to cause the visitor's OnCanWrite to be invoked.
|
| - creator_.set_sequence_number(2);
|
| + peer_creator_.set_sequence_number(2);
|
| QuicAckFrame ack_one = InitAckFrame(0, 0);
|
| ProcessAckPacket(&ack_one);
|
|
|
| @@ -2099,9 +2108,6 @@ TEST_P(QuicConnectionTest, DontLatchUnackedPacket) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketAfterFecPacket) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| // Don't send missing packet 1.
|
| @@ -2111,9 +2117,6 @@ TEST_P(QuicConnectionTest, ReviveMissingPacketAfterFecPacket) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketWithVaryingSeqNumLengths) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| // Set up a debug visitor to the connection.
|
| @@ -2143,9 +2146,6 @@ TEST_P(QuicConnectionTest, ReviveMissingPacketWithVaryingSeqNumLengths) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketWithVaryingConnectionIdLengths) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| // Set up a debug visitor to the connection.
|
| @@ -2175,9 +2175,6 @@ TEST_P(QuicConnectionTest, ReviveMissingPacketWithVaryingConnectionIdLengths) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| ProcessFecProtectedPacket(1, false, kEntropyFlag);
|
| @@ -2188,9 +2185,6 @@ TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| ProcessFecProtectedPacket(1, false, !kEntropyFlag);
|
| @@ -2203,9 +2197,6 @@ TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketsThenFecPacket) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| // Don't send missing packet 1.
|
| @@ -2217,9 +2208,6 @@ TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacket) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPackets) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| ProcessFecProtectedPacket(1, false, !kEntropyFlag);
|
| @@ -2548,7 +2536,7 @@ TEST_P(QuicConnectionTest, CloseFecGroup) {
|
| ASSERT_EQ(1u, connection_.NumFecGroups());
|
|
|
| // Now send non-fec protected ack packet and close the group.
|
| - creator_.set_sequence_number(4);
|
| + peer_creator_.set_sequence_number(4);
|
| if (version() > QUIC_VERSION_15) {
|
| QuicStopWaitingFrame frame = InitStopWaitingFrame(5);
|
| ProcessStopWaitingPacket(&frame);
|
| @@ -2585,9 +2573,6 @@ TEST_P(QuicConnectionTest, UpdateQuicCongestionFeedbackFrame) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, DontUpdateQuicCongestionFeedbackFrameForRevived) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| SendAckPacketToPeer();
|
| // Process an FEC packet, and revive the missing data packet
|
| @@ -2759,8 +2744,7 @@ TEST_P(QuicConnectionTest, SendSchedulerDelayThenSend) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, SendSchedulerDelayThenRetransmit) {
|
| - EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _))
|
| - .WillRepeatedly(testing::Return(QuicTime::Delta::Zero()));
|
| + CongestionUnblockWrites();
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _));
|
| connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
| @@ -2769,17 +2753,13 @@ TEST_P(QuicConnectionTest, SendSchedulerDelayThenRetransmit) {
|
| // Test that if we send a retransmit with a delay, it ends up queued in the
|
| // sent packet manager, but not yet serialized.
|
| EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| - EXPECT_CALL(*send_algorithm_,
|
| - TimeUntilSend(_, _, _)).WillOnce(
|
| - testing::Return(QuicTime::Delta::FromMicroseconds(1)));
|
| + CongestionBlockWrites();
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| EXPECT_EQ(0u, connection_.NumQueuedPackets());
|
|
|
| // Advance the clock to fire the alarm, and configure the scheduler
|
| // to permit the packet to be sent.
|
| - EXPECT_CALL(*send_algorithm_,
|
| - TimeUntilSend(_, _, _)).Times(3).
|
| - WillRepeatedly(testing::Return(QuicTime::Delta::Zero()));
|
| + CongestionUnblockWrites();
|
|
|
| // Ensure the scheduler is notified this is a retransmit.
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
|
| @@ -2854,9 +2834,7 @@ TEST_P(QuicConnectionTest, SendSchedulerDelayThenOnCanWrite) {
|
| // TODO(ianswett): This test is unrealistic, because we would not serialize
|
| // new data if the send algorithm said not to.
|
| QuicPacket* packet = ConstructDataPacket(1, 0, !kEntropyFlag);
|
| - EXPECT_CALL(*send_algorithm_,
|
| - TimeUntilSend(_, _, _)).WillOnce(
|
| - testing::Return(QuicTime::Delta::FromMicroseconds(10)));
|
| + CongestionBlockWrites();
|
| connection_.SendPacket(
|
| ENCRYPTION_NONE, 1, packet, kTestEntropyHash, HAS_RETRANSMITTABLE_DATA);
|
| EXPECT_EQ(1u, connection_.NumQueuedPackets());
|
| @@ -2870,10 +2848,11 @@ TEST_P(QuicConnectionTest, SendSchedulerDelayThenOnCanWrite) {
|
| TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) {
|
| // All packets carry version info till version is negotiated.
|
| size_t payload_length;
|
| - connection_.options()->max_packet_length =
|
| - GetPacketLengthForOneStream(
|
| - connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
|
| - NOT_IN_FEC_GROUP, &payload_length);
|
| + size_t length = GetPacketLengthForOneStream(
|
| + connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
|
| + NOT_IN_FEC_GROUP, &payload_length);
|
| + QuicConnectionPeer::GetPacketCreator(&connection_)->set_max_packet_length(
|
| + length);
|
|
|
| // Queue the first packet.
|
| EXPECT_CALL(*send_algorithm_,
|
| @@ -2894,9 +2873,11 @@ TEST_P(QuicConnectionTest, LoopThroughSendingPackets) {
|
| // offset 0, and 2 for non-zero offsets up through 16K. Increase
|
| // max_packet_length by 2 so that subsequent packets containing subsequent
|
| // stream frames with non-zero offets will fit within the packet length.
|
| - connection_.options()->max_packet_length = 2 + GetPacketLengthForOneStream(
|
| + size_t length = 2 + GetPacketLengthForOneStream(
|
| connection_.version(), kIncludeVersion, PACKET_1BYTE_SEQUENCE_NUMBER,
|
| NOT_IN_FEC_GROUP, &payload_length);
|
| + QuicConnectionPeer::GetPacketCreator(&connection_)->set_max_packet_length(
|
| + length);
|
|
|
| // Queue the first packet.
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(7);
|
| @@ -3160,7 +3141,7 @@ TEST_P(QuicConnectionTest, InvalidPacket) {
|
|
|
| TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
|
| // Set the sequence number of the ack packet to be least unacked (4).
|
| - creator_.set_sequence_number(3);
|
| + peer_creator_.set_sequence_number(3);
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| if (version() > QUIC_VERSION_15) {
|
| QuicStopWaitingFrame frame = InitStopWaitingFrame(4);
|
| @@ -3183,9 +3164,6 @@ TEST_P(QuicConnectionTest, ReceivedEntropyHashCalculation) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, ReceivedEntropyHashCalculationHalfFEC) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| // FEC packets should not change the entropy hash calculation.
|
| EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(AtLeast(1));
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| @@ -3204,7 +3182,7 @@ TEST_P(QuicConnectionTest, UpdateEntropyForReceivedPackets) {
|
| ProcessDataPacket(4, 1, !kEntropyFlag);
|
| EXPECT_EQ(34u, outgoing_ack()->received_info.entropy_hash);
|
| // Make 4th packet my least unacked, and update entropy for 2, 3 packets.
|
| - creator_.set_sequence_number(5);
|
| + peer_creator_.set_sequence_number(5);
|
| QuicPacketEntropyHash six_packet_entropy_hash = 0;
|
| QuicPacketEntropyHash kRandomEntropyHash = 129u;
|
| if (version() > QUIC_VERSION_15) {
|
| @@ -3232,7 +3210,7 @@ TEST_P(QuicConnectionTest, UpdateEntropyHashUptoCurrentPacket) {
|
| ProcessDataPacket(5, 1, !kEntropyFlag);
|
| ProcessDataPacket(22, 1, kEntropyFlag);
|
| EXPECT_EQ(66u, outgoing_ack()->received_info.entropy_hash);
|
| - creator_.set_sequence_number(22);
|
| + peer_creator_.set_sequence_number(22);
|
| QuicPacketEntropyHash kRandomEntropyHash = 85u;
|
| // Current packet is the least unacked packet.
|
| QuicPacketEntropyHash ack_entropy_hash;
|
| @@ -3278,7 +3256,7 @@ TEST_P(QuicConnectionTest, EntropyCalculationForTruncatedAck) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, CheckSentEntropyHash) {
|
| - creator_.set_sequence_number(1);
|
| + peer_creator_.set_sequence_number(1);
|
| SequenceNumberSet missing_packets;
|
| QuicPacketEntropyHash entropy_hash = 0;
|
| QuicPacketSequenceNumber max_sequence_number = 51;
|
| @@ -3323,7 +3301,7 @@ TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) {
|
| QuicFrame frame(&frame1_);
|
| frames.push_back(frame);
|
| scoped_ptr<QuicPacket> packet(
|
| - framer_.BuildUnsizedDataPacket(header, frames).packet);
|
| + BuildUnsizedDataPacket(&framer_, header, frames).packet);
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
|
|
|
| @@ -3361,7 +3339,7 @@ TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) {
|
| QuicFrame frame(&frame1_);
|
| frames.push_back(frame);
|
| scoped_ptr<QuicPacket> packet(
|
| - framer_.BuildUnsizedDataPacket(header, frames).packet);
|
| + BuildUnsizedDataPacket(&framer_, header, frames).packet);
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
|
|
|
| @@ -3406,7 +3384,7 @@ TEST_P(QuicConnectionTest,
|
| QuicFrame frame(&frame1_);
|
| frames.push_back(frame);
|
| scoped_ptr<QuicPacket> packet(
|
| - framer_.BuildUnsizedDataPacket(header, frames).packet);
|
| + BuildUnsizedDataPacket(&framer_, header, frames).packet);
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
|
|
|
| @@ -3451,7 +3429,7 @@ TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) {
|
| QuicFrame frame(&frame1_);
|
| frames.push_back(frame);
|
| scoped_ptr<QuicPacket> packet(
|
| - framer_.BuildUnsizedDataPacket(header, frames).packet);
|
| + BuildUnsizedDataPacket(&framer_, header, frames).packet);
|
| encrypted.reset(framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
|
| EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| @@ -3532,9 +3510,6 @@ TEST_P(QuicConnectionTest, CheckSendStats) {
|
| }
|
|
|
| TEST_P(QuicConnectionTest, CheckReceiveStats) {
|
| - if (version() < QUIC_VERSION_15) {
|
| - return;
|
| - }
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
|
|
| size_t received_bytes = 0;
|
| @@ -3596,7 +3571,7 @@ TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) {
|
| frames.push_back(stream_frame);
|
| frames.push_back(close_frame);
|
| scoped_ptr<QuicPacket> packet(
|
| - framer_.BuildUnsizedDataPacket(header_, frames).packet);
|
| + BuildUnsizedDataPacket(&framer_, header_, frames).packet);
|
| EXPECT_TRUE(NULL != packet.get());
|
| scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
|
| ENCRYPTION_NONE, 1, *packet));
|
| @@ -3886,7 +3861,7 @@ TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
|
| ack_header.fec_group = 1;
|
|
|
| QuicPacket* packet =
|
| - framer_.BuildUnsizedDataPacket(ack_header, frames).packet;
|
| + BuildUnsizedDataPacket(&framer_, ack_header, frames).packet;
|
|
|
| // Take the packet which contains the ACK frame, and construct and deliver an
|
| // FEC packet which allows the ACK packet to be recovered.
|
| @@ -3894,7 +3869,7 @@ TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
|
| }
|
|
|
| class MockQuicConnectionDebugVisitor
|
| - : public QuicConnectionDebugVisitorInterface {
|
| + : public QuicConnectionDebugVisitor {
|
| public:
|
| MOCK_METHOD1(OnFrameAddedToPacket,
|
| void(const QuicFrame&));
|
|
|