OLD | NEW |
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/core/quic_connection.h" | 5 #include "net/quic/core/quic_connection.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <memory> | 8 #include <memory> |
9 #include <ostream> | 9 #include <ostream> |
10 #include <utility> | 10 #include <utility> |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 AckResponse::kDefer); | 715 AckResponse::kDefer); |
716 connection_.set_visitor(&visitor_); | 716 connection_.set_visitor(&visitor_); |
717 connection_.SetSendAlgorithm(kDefaultPathId, send_algorithm_); | 717 connection_.SetSendAlgorithm(kDefaultPathId, send_algorithm_); |
718 connection_.SetLossAlgorithm(kDefaultPathId, loss_algorithm_.get()); | 718 connection_.SetLossAlgorithm(kDefaultPathId, loss_algorithm_.get()); |
719 framer_.set_received_entropy_calculator(&entropy_calculator_); | 719 framer_.set_received_entropy_calculator(&entropy_calculator_); |
720 peer_framer_.set_received_entropy_calculator(&peer_entropy_calculator_); | 720 peer_framer_.set_received_entropy_calculator(&peer_entropy_calculator_); |
721 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 721 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
722 .WillRepeatedly(Return(QuicTime::Delta::Zero())); | 722 .WillRepeatedly(Return(QuicTime::Delta::Zero())); |
723 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 723 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
724 .Times(AnyNumber()); | 724 .Times(AnyNumber()); |
725 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | |
726 .WillRepeatedly(Return(QuicTime::Delta::Zero())); | |
727 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 725 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
728 .WillRepeatedly(Return(kDefaultTCPMSS)); | 726 .WillRepeatedly(Return(kDefaultTCPMSS)); |
729 EXPECT_CALL(*send_algorithm_, PacingRate(_)) | 727 EXPECT_CALL(*send_algorithm_, PacingRate(_)) |
730 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 728 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
731 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 729 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
732 .WillByDefault(Return(true)); | 730 .WillByDefault(Return(true)); |
733 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) | 731 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) |
734 .Times(AnyNumber()); | 732 .Times(AnyNumber()); |
735 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()) | 733 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()) |
736 .Times(AnyNumber()) | 734 .Times(AnyNumber()) |
(...skipping 2030 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2767 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2765 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2768 EXPECT_EQ(clock_.Now() + DefaultRetransmissionTime(), | 2766 EXPECT_EQ(clock_.Now() + DefaultRetransmissionTime(), |
2769 retransmission_alarm->deadline()); | 2767 retransmission_alarm->deadline()); |
2770 | 2768 |
2771 // Advance the time right before the RTO, then receive an ack for the first | 2769 // Advance the time right before the RTO, then receive an ack for the first |
2772 // packet to delay the RTO. | 2770 // packet to delay the RTO. |
2773 clock_.AdvanceTime(DefaultRetransmissionTime()); | 2771 clock_.AdvanceTime(DefaultRetransmissionTime()); |
2774 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 2772 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
2775 QuicAckFrame ack = InitAckFrame(1); | 2773 QuicAckFrame ack = InitAckFrame(1); |
2776 ProcessAckPacket(&ack); | 2774 ProcessAckPacket(&ack); |
| 2775 // Now we have an RTT sample of DefaultRetransmissionTime(500ms), |
| 2776 // so the RTO has increased to 2 * SRTT. |
2777 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2777 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2778 EXPECT_GT(retransmission_alarm->deadline(), clock_.Now()); | 2778 EXPECT_EQ(retransmission_alarm->deadline(), |
| 2779 clock_.Now() + 2 * DefaultRetransmissionTime()); |
2779 | 2780 |
2780 // Move forward past the original RTO and ensure the RTO is still pending. | 2781 // Move forward past the original RTO and ensure the RTO is still pending. |
2781 clock_.AdvanceTime(2 * DefaultRetransmissionTime()); | 2782 clock_.AdvanceTime(2 * DefaultRetransmissionTime()); |
2782 | 2783 |
2783 // Ensure the second packet gets retransmitted when it finally fires. | 2784 // Ensure the second packet gets retransmitted when it finally fires. |
2784 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2785 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2785 EXPECT_LT(retransmission_alarm->deadline(), clock_.ApproximateNow()); | 2786 EXPECT_EQ(retransmission_alarm->deadline(), clock_.ApproximateNow()); |
2786 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 2787 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
2787 // Manually cancel the alarm to simulate a real test. | 2788 // Manually cancel the alarm to simulate a real test. |
2788 connection_.GetRetransmissionAlarm()->Fire(); | 2789 connection_.GetRetransmissionAlarm()->Fire(); |
2789 | 2790 |
2790 // The new retransmitted packet number should set the RTO to a larger value | 2791 // The new retransmitted packet number should set the RTO to a larger value |
2791 // than previously. | 2792 // than previously. |
2792 EXPECT_TRUE(retransmission_alarm->IsSet()); | 2793 EXPECT_TRUE(retransmission_alarm->IsSet()); |
2793 QuicTime next_rto_time = retransmission_alarm->deadline(); | 2794 QuicTime next_rto_time = retransmission_alarm->deadline(); |
2794 QuicTime expected_rto_time = | 2795 QuicTime expected_rto_time = |
2795 connection_.sent_packet_manager().GetRetransmissionTime(); | 2796 connection_.sent_packet_manager().GetRetransmissionTime(); |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3279 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); | 3280 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); |
3280 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3281 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3281 | 3282 |
3282 // The original alarm will fire. We should not time out because we had a | 3283 // The original alarm will fire. We should not time out because we had a |
3283 // network event at t=5ms. The alarm will reregister. | 3284 // network event at t=5ms. The alarm will reregister. |
3284 clock_.AdvanceTime(initial_idle_timeout - five_ms - five_ms); | 3285 clock_.AdvanceTime(initial_idle_timeout - five_ms - five_ms); |
3285 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3286 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
3286 connection_.GetTimeoutAlarm()->Fire(); | 3287 connection_.GetTimeoutAlarm()->Fire(); |
3287 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3288 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
3288 EXPECT_TRUE(connection_.connected()); | 3289 EXPECT_TRUE(connection_.connected()); |
3289 if (FLAGS_quic_better_last_send_for_timeout) { | 3290 EXPECT_EQ(default_timeout + five_ms, |
3290 EXPECT_EQ(default_timeout + five_ms, | 3291 connection_.GetTimeoutAlarm()->deadline()); |
3291 connection_.GetTimeoutAlarm()->deadline()); | |
3292 } else { | |
3293 EXPECT_EQ(default_timeout + five_ms + five_ms, | |
3294 connection_.GetTimeoutAlarm()->deadline()); | |
3295 } | |
3296 | 3292 |
3297 // This time, we should time out. | 3293 // This time, we should time out. |
3298 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 3294 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
3299 ConnectionCloseSource::FROM_SELF)); | 3295 ConnectionCloseSource::FROM_SELF)); |
3300 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 3296 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
3301 clock_.AdvanceTime(five_ms); | 3297 clock_.AdvanceTime(five_ms); |
3302 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); | 3298 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); |
3303 connection_.GetTimeoutAlarm()->Fire(); | 3299 connection_.GetTimeoutAlarm()->Fire(); |
3304 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3300 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
3305 EXPECT_FALSE(connection_.connected()); | 3301 EXPECT_FALSE(connection_.connected()); |
3306 } | 3302 } |
3307 | 3303 |
3308 TEST_P(QuicConnectionTest, TimeoutAfterRetransmission) { | 3304 TEST_P(QuicConnectionTest, TimeoutAfterRetransmission) { |
3309 FLAGS_quic_better_last_send_for_timeout = true; | |
3310 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3305 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3311 EXPECT_TRUE(connection_.connected()); | 3306 EXPECT_TRUE(connection_.connected()); |
3312 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 3307 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
3313 QuicConfig config; | 3308 QuicConfig config; |
3314 connection_.SetFromConfig(config); | 3309 connection_.SetFromConfig(config); |
3315 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); | 3310 EXPECT_FALSE(QuicConnectionPeer::IsSilentCloseEnabled(&connection_)); |
3316 | 3311 |
3317 const QuicTime start_time = clock_.Now(); | 3312 const QuicTime start_time = clock_.Now(); |
3318 const QuicTime::Delta initial_idle_timeout = | 3313 const QuicTime::Delta initial_idle_timeout = |
3319 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); | 3314 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3422 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); | 3417 SendStreamDataToPeer(kClientDataStreamId1, "foo", 0, kFin, nullptr); |
3423 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 3418 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
3424 | 3419 |
3425 // The original alarm will fire. We should not time out because we had a | 3420 // The original alarm will fire. We should not time out because we had a |
3426 // network event at t=5ms. The alarm will reregister. | 3421 // network event at t=5ms. The alarm will reregister. |
3427 clock_.AdvanceTime(default_idle_timeout - five_ms - five_ms); | 3422 clock_.AdvanceTime(default_idle_timeout - five_ms - five_ms); |
3428 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); | 3423 EXPECT_EQ(default_timeout, clock_.ApproximateNow()); |
3429 connection_.GetTimeoutAlarm()->Fire(); | 3424 connection_.GetTimeoutAlarm()->Fire(); |
3430 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); | 3425 EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet()); |
3431 EXPECT_TRUE(connection_.connected()); | 3426 EXPECT_TRUE(connection_.connected()); |
3432 if (FLAGS_quic_better_last_send_for_timeout) { | 3427 EXPECT_EQ(default_timeout + five_ms, |
3433 EXPECT_EQ(default_timeout + five_ms, | 3428 connection_.GetTimeoutAlarm()->deadline()); |
3434 connection_.GetTimeoutAlarm()->deadline()); | |
3435 } else { | |
3436 EXPECT_EQ(default_timeout + five_ms + five_ms, | |
3437 connection_.GetTimeoutAlarm()->deadline()); | |
3438 } | |
3439 | 3429 |
3440 // This time, we should time out. | 3430 // This time, we should time out. |
3441 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, | 3431 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_NETWORK_IDLE_TIMEOUT, _, |
3442 ConnectionCloseSource::FROM_SELF)); | 3432 ConnectionCloseSource::FROM_SELF)); |
3443 clock_.AdvanceTime(five_ms); | 3433 clock_.AdvanceTime(five_ms); |
3444 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); | 3434 EXPECT_EQ(default_timeout + five_ms, clock_.ApproximateNow()); |
3445 connection_.GetTimeoutAlarm()->Fire(); | 3435 connection_.GetTimeoutAlarm()->Fire(); |
3446 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 3436 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
3447 EXPECT_FALSE(connection_.connected()); | 3437 EXPECT_FALSE(connection_.connected()); |
3448 } | 3438 } |
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4235 &connection_, &TestConnection::SendCryptoStreamData))); | 4225 &connection_, &TestConnection::SendCryptoStreamData))); |
4236 // Process a packet from the crypto stream, which is frame1_'s default. | 4226 // Process a packet from the crypto stream, which is frame1_'s default. |
4237 // Receiving the CHLO as packet 2 first will cause the connection to | 4227 // Receiving the CHLO as packet 2 first will cause the connection to |
4238 // immediately send an ack, due to the packet gap. | 4228 // immediately send an ack, due to the packet gap. |
4239 ProcessPacket(kDefaultPathId, 2); | 4229 ProcessPacket(kDefaultPathId, 2); |
4240 // Check that ack is sent and that delayed ack alarm is reset. | 4230 // Check that ack is sent and that delayed ack alarm is reset. |
4241 EXPECT_EQ(3u, writer_->frame_count()); | 4231 EXPECT_EQ(3u, writer_->frame_count()); |
4242 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 4232 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
4243 EXPECT_EQ(1u, writer_->stream_frames().size()); | 4233 EXPECT_EQ(1u, writer_->stream_frames().size()); |
4244 EXPECT_FALSE(writer_->ack_frames().empty()); | 4234 EXPECT_FALSE(writer_->ack_frames().empty()); |
| 4235 EXPECT_EQ(2u, writer_->ack_frames().front().largest_observed); |
4245 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 4236 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
4246 } | 4237 } |
4247 | 4238 |
4248 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) { | 4239 TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) { |
4249 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 4240 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
4250 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, | 4241 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 0, !kFin, |
4251 nullptr); | 4242 nullptr); |
4252 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, | 4243 connection_.SendStreamDataWithString(kClientDataStreamId1, "foo", 3, !kFin, |
4253 nullptr); | 4244 nullptr); |
4254 // Ack the second packet, which will retransmit the first packet. | 4245 // Ack the second packet, which will retransmit the first packet. |
(...skipping 29 matching lines...) Expand all Loading... |
4284 EXPECT_CALL(visitor_, OnCanWrite()) | 4275 EXPECT_CALL(visitor_, OnCanWrite()) |
4285 .WillOnce(IgnoreResult(InvokeWithoutArgs( | 4276 .WillOnce(IgnoreResult(InvokeWithoutArgs( |
4286 &connection_, &TestConnection::EnsureWritableAndSendStreamData5))); | 4277 &connection_, &TestConnection::EnsureWritableAndSendStreamData5))); |
4287 ProcessAckPacket(&ack); | 4278 ProcessAckPacket(&ack); |
4288 | 4279 |
4289 // Check that ack is bundled with outgoing data and the delayed ack | 4280 // Check that ack is bundled with outgoing data and the delayed ack |
4290 // alarm is reset. | 4281 // alarm is reset. |
4291 EXPECT_EQ(3u, writer_->frame_count()); | 4282 EXPECT_EQ(3u, writer_->frame_count()); |
4292 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 4283 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
4293 EXPECT_FALSE(writer_->ack_frames().empty()); | 4284 EXPECT_FALSE(writer_->ack_frames().empty()); |
| 4285 EXPECT_EQ(3u, writer_->ack_frames().front().largest_observed); |
4294 EXPECT_EQ(1u, writer_->stream_frames().size()); | 4286 EXPECT_EQ(1u, writer_->stream_frames().size()); |
4295 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 4287 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
4296 } | 4288 } |
4297 | 4289 |
4298 TEST_P(QuicConnectionTest, NoAckSentForClose) { | 4290 TEST_P(QuicConnectionTest, NoAckSentForClose) { |
4299 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 4291 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
4300 ProcessPacket(kDefaultPathId, 1); | 4292 ProcessPacket(kDefaultPathId, 1); |
4301 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _, | 4293 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _, |
4302 ConnectionCloseSource::FROM_PEER)); | 4294 ConnectionCloseSource::FROM_PEER)); |
4303 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); | 4295 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0); |
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4924 // Verify that the listener is not notified again when the | 4916 // Verify that the listener is not notified again when the |
4925 // retransmit is acked. | 4917 // retransmit is acked. |
4926 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _)); | 4918 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _)); |
4927 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 4919 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
4928 QuicAckFrame third_ack_frame = InitAckFrame(5); | 4920 QuicAckFrame third_ack_frame = InitAckFrame(5); |
4929 ProcessAckPacket(&third_ack_frame); | 4921 ProcessAckPacket(&third_ack_frame); |
4930 } | 4922 } |
4931 | 4923 |
4932 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) { | 4924 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) { |
4933 QuicPacketHeader header; | 4925 QuicPacketHeader header; |
| 4926 header.packet_number = 1; |
4934 | 4927 |
4935 MockQuicConnectionDebugVisitor debug_visitor; | 4928 MockQuicConnectionDebugVisitor debug_visitor; |
4936 connection_.set_debug_visitor(&debug_visitor); | 4929 connection_.set_debug_visitor(&debug_visitor); |
4937 EXPECT_CALL(debug_visitor, OnPacketHeader(Ref(header))).Times(1); | 4930 EXPECT_CALL(debug_visitor, OnPacketHeader(Ref(header))).Times(1); |
4938 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)).Times(1); | 4931 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)).Times(1); |
4939 EXPECT_CALL(debug_visitor, OnSuccessfulVersionNegotiation(_)).Times(1); | 4932 EXPECT_CALL(debug_visitor, OnSuccessfulVersionNegotiation(_)).Times(1); |
4940 connection_.OnPacketHeader(header); | 4933 connection_.OnPacketHeader(header); |
4941 } | 4934 } |
4942 | 4935 |
4943 TEST_P(QuicConnectionTest, Pacing) { | 4936 TEST_P(QuicConnectionTest, Pacing) { |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5263 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); | 5256 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); |
5264 EXPECT_EQ(1u, writer_->frame_count()); | 5257 EXPECT_EQ(1u, writer_->frame_count()); |
5265 EXPECT_FALSE(writer_->connection_close_frames().empty()); | 5258 EXPECT_FALSE(writer_->connection_close_frames().empty()); |
5266 // Ack frame is not bundled in connection close packet. | 5259 // Ack frame is not bundled in connection close packet. |
5267 EXPECT_TRUE(writer_->ack_frames().empty()); | 5260 EXPECT_TRUE(writer_->ack_frames().empty()); |
5268 } | 5261 } |
5269 | 5262 |
5270 } // namespace | 5263 } // namespace |
5271 } // namespace test | 5264 } // namespace test |
5272 } // namespace net | 5265 } // namespace net |
OLD | NEW |