Index: webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
diff --git a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
index 2c94c71c75e5f55af57d397cc4a410034117db75..d2e9eb340db90743614c44665d848b2f60a7d6f1 100644 |
--- a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
+++ b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
@@ -13,6 +13,7 @@ |
#include <vector> |
#include "webrtc/base/checks.h" |
+#include "webrtc/base/safe_conversions.h" |
#include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h" |
#include "webrtc/modules/congestion_controller/transport_feedback_adapter.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
@@ -128,6 +129,72 @@ TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); |
} |
+TEST_F(TransportFeedbackAdapterTest, Timeout) { |
+ const int64_t kFeedbackTimeoutMs = 60001; |
+ { |
+ std::vector<PacketInfo> packets; |
+ packets.push_back(PacketInfo(100, 200, 0, 1500, 0)); |
+ packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); |
+ packets.push_back(PacketInfo(120, 220, 2, 1500, 0)); |
+ packets.push_back(PacketInfo(130, 230, 3, 1500, 1)); |
+ packets.push_back(PacketInfo(140, 240, 4, 1500, 1)); |
+ |
+ for (const PacketInfo& packet : packets) |
+ OnSentPacket(packet); |
+ |
+ rtcp::TransportFeedback feedback; |
+ feedback.SetBase(packets[0].sequence_number, |
+ packets[0].arrival_time_ms * 1000); |
+ |
+ for (const PacketInfo& packet : packets) { |
+ EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
+ packet.arrival_time_ms * 1000)); |
+ } |
+ |
+ feedback.Build(); |
+ |
+ clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs); |
+ PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240, |
+ 5, 1500, 1); |
+ OnSentPacket(later_packet); |
+ |
+ adapter_->OnTransportFeedback(feedback); |
+ EXPECT_EQ(0, rtc::checked_cast<int>( |
+ adapter_->GetTransportFeedbackVector().size())); |
+ } |
+ |
+ { |
+ std::vector<PacketInfo> packets; |
+ packets.push_back(PacketInfo(100, 200, 0, 1500, 0)); |
+ packets.push_back(PacketInfo(110, 210, 1, 1500, 0)); |
+ packets.push_back(PacketInfo(120, 220, 2, 1500, 0)); |
+ packets.push_back(PacketInfo(130, 230, 3, 1500, 1)); |
+ packets.push_back(PacketInfo(140, 240, 4, 1500, 1)); |
+ |
+ for (const PacketInfo& packet : packets) |
+ OnSentPacket(packet); |
+ |
+ rtcp::TransportFeedback feedback; |
+ feedback.SetBase(packets[0].sequence_number, |
+ packets[0].arrival_time_ms * 1000); |
+ |
+ for (const PacketInfo& packet : packets) { |
+ EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
+ packet.arrival_time_ms * 1000)); |
+ } |
+ |
+ feedback.Build(); |
+ |
+ clock_.AdvanceTimeMilliseconds(kFeedbackTimeoutMs - 1); |
+ PacketInfo later_packet(kFeedbackTimeoutMs + 140, kFeedbackTimeoutMs + 240, |
+ 5, 1500, 1); |
+ OnSentPacket(later_packet); |
+ |
+ adapter_->OnTransportFeedback(feedback); |
+ ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); |
+ } |
+} |
+ |
TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) { |
std::vector<PacketInfo> packets; |
packets.push_back(PacketInfo(100, 200, 0, 1500, 1)); |