| 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..327d057c1acb72d35dbf6b406dc03d3dc77a323c 100644
|
| --- a/net/quic/quic_connection_test.cc
|
| +++ b/net/quic/quic_connection_test.cc
|
| @@ -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,
|
| @@ -915,7 +916,7 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
|
|
|
| QuicConnectionId connection_id_;
|
| QuicFramer framer_;
|
| - QuicPacketCreator creator_;
|
| + QuicPacketCreator peer_creator_;
|
| MockEntropyCalculator entropy_calculator_;
|
|
|
| MockSendAlgorithm* send_algorithm_;
|
| @@ -1016,7 +1017,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 +1110,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 +1206,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 +1217,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 +1232,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 +1278,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 +1300,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 +1312,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 +1322,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 +1332,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 +1434,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 +1456,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());
|
| }
|
| @@ -1690,7 +1698,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);
|
|
|
| @@ -2548,7 +2556,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);
|
| @@ -2870,10 +2878,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 +2903,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 +3171,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);
|
| @@ -3204,7 +3215,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 +3243,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 +3289,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;
|
|
|