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 a41926bbc842938f58376025dd30ae6af7259152..42effebcf9d1d0fccd3c39a9a4c60048ded6e1c5 100644 |
--- a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
+++ b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
@@ -90,8 +90,11 @@ class TransportFeedbackAdapterTest : public ::testing::Test { |
int64_t arrival_time_delta = |
truth[0].arrival_time_ms - input[0].arrival_time_ms; |
for (size_t i = 0; i < len; ++i) { |
- EXPECT_EQ(truth[i].arrival_time_ms, |
- input[i].arrival_time_ms + arrival_time_delta); |
+ RTC_CHECK(truth[i].arrival_time_ms != PacketFeedback::kNotReceived); |
+ if (input[i].arrival_time_ms != PacketFeedback::kNotReceived) { |
+ EXPECT_EQ(truth[i].arrival_time_ms, |
+ input[i].arrival_time_ms + arrival_time_delta); |
+ } |
EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms); |
EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number); |
EXPECT_EQ(truth[i].payload_size, input[i].payload_size); |
@@ -140,6 +143,41 @@ TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); |
} |
+TEST_F(TransportFeedbackAdapterTest, FeedbackVectorReportsUnreceived) { |
+ std::vector<PacketFeedback> sent_packets = { |
+ PacketFeedback(100, 220, 0, 1500, kPacingInfo0), |
+ PacketFeedback(110, 210, 1, 1500, kPacingInfo0), |
+ PacketFeedback(120, 220, 2, 1500, kPacingInfo0), |
+ PacketFeedback(130, 230, 3, 1500, kPacingInfo0), |
+ PacketFeedback(140, 240, 4, 1500, kPacingInfo0), |
+ PacketFeedback(150, 250, 5, 1500, kPacingInfo0), |
+ PacketFeedback(160, 260, 6, 1500, kPacingInfo0) |
+ }; |
+ |
+ for (const PacketFeedback& packet : sent_packets) |
+ OnSentPacket(packet); |
+ |
+ // Note: Important to include the last packet, as only unreceived packets in |
+ // between received packets can be inferred. |
+ std::vector<PacketFeedback> received_packets = { |
+ sent_packets[0], sent_packets[2], sent_packets[6] |
+ }; |
+ |
+ rtcp::TransportFeedback feedback; |
+ feedback.SetBase(received_packets[0].sequence_number, |
+ received_packets[0].arrival_time_ms * 1000); |
+ |
+ for (const PacketFeedback& packet : received_packets) { |
+ EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
+ packet.arrival_time_ms * 1000)); |
+ } |
+ |
+ feedback.Build(); |
+ |
+ adapter_->OnTransportFeedback(feedback); |
+ ComparePacketVectors(sent_packets, adapter_->GetTransportFeedbackVector()); |
+} |
+ |
TEST_F(TransportFeedbackAdapterTest, LongFeedbackDelays) { |
const int64_t kFeedbackTimeoutMs = 60001; |
const int kMaxConsecutiveFailedLookups = 5; |
@@ -305,15 +343,11 @@ TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) { |
} |
} |
-TEST_F(TransportFeedbackAdapterTest, HandlesReordering) { |
+TEST_F(TransportFeedbackAdapterTest, HandlesArrivalReordering) { |
std::vector<PacketFeedback> packets; |
packets.push_back(PacketFeedback(120, 200, 0, 1500, kPacingInfo0)); |
packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); |
packets.push_back(PacketFeedback(100, 220, 2, 1500, kPacingInfo0)); |
- std::vector<PacketFeedback> expected_packets; |
- expected_packets.push_back(packets[2]); |
- expected_packets.push_back(packets[1]); |
- expected_packets.push_back(packets[0]); |
for (const PacketFeedback& packet : packets) |
OnSentPacket(packet); |
@@ -329,9 +363,11 @@ TEST_F(TransportFeedbackAdapterTest, HandlesReordering) { |
feedback.Build(); |
+ // Adapter keeps the packets ordered by sequence number (which is itself |
+ // assigned by the order of transmission). Reordering by some other criteria, |
+ // eg. arrival time, is up to the observers. |
adapter_->OnTransportFeedback(feedback); |
- ComparePacketVectors(expected_packets, |
- adapter_->GetTransportFeedbackVector()); |
+ ComparePacketVectors(packets, adapter_->GetTransportFeedbackVector()); |
} |
TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) { |
@@ -394,17 +430,7 @@ TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) { |
EXPECT_TRUE(feedback.get() != nullptr); |
adapter_->OnTransportFeedback(*feedback.get()); |
- { |
- // Expected to be ordered on arrival time when the feedback message has been |
- // parsed. |
- std::vector<PacketFeedback> expected_packets; |
- expected_packets.push_back(sent_packets[0]); |
- expected_packets.push_back(sent_packets[3]); |
- expected_packets.push_back(sent_packets[1]); |
- expected_packets.push_back(sent_packets[2]); |
- ComparePacketVectors(expected_packets, |
- adapter_->GetTransportFeedbackVector()); |
- } |
+ ComparePacketVectors(sent_packets, adapter_->GetTransportFeedbackVector()); |
// Create a new feedback message and add the trailing item. |
feedback.reset(new rtcp::TransportFeedback()); |