Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(353)

Unified Diff: webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc

Issue 2633923003: Add rtcp::TransportFeedback::GetReceivedPackets() (Closed)
Patch Set: . Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
index dbb3eaa4d78abd41074875cb2bb1ebfb854a43a5..1aeb55bceafb292a22abacc7a4518510caa31353 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
@@ -16,15 +16,43 @@
#include "webrtc/test/gtest.h"
using ::testing::_;
-using ::testing::InSequence;
+using ::testing::ElementsAre;
using ::testing::Invoke;
using ::testing::Return;
namespace webrtc {
+namespace {
+
+constexpr size_t kDefaultPacketSize = 100;
+constexpr uint32_t kMediaSsrc = 456;
+constexpr uint16_t kBaseSeq = 10;
+constexpr int64_t kBaseTimeMs = 123;
+constexpr int64_t kMaxSmallDeltaMs =
+ (rtcp::TransportFeedback::kDeltaScaleFactor * 0xFF) / 1000;
+
+std::vector<uint16_t> SequenceNumbers(
+ const rtcp::TransportFeedback& feedback_packet) {
+ std::vector<uint16_t> sequence_numbers;
+ for (const auto& rtp_packet_received : feedback_packet.GetReceivedPackets()) {
+ sequence_numbers.push_back(rtp_packet_received.sequence_number());
+ }
+ return sequence_numbers;
+}
+
+std::vector<int64_t> TimestampsMs(
+ const rtcp::TransportFeedback& feedback_packet) {
+ std::vector<int64_t> timestamps;
+ int64_t timestamp_us = feedback_packet.GetBaseTimeUs();
+ for (const auto& rtp_packet_received : feedback_packet.GetReceivedPackets()) {
+ timestamp_us += rtp_packet_received.delta_us();
+ timestamps.push_back(timestamp_us / 1000);
+ }
+ return timestamps;
+}
class MockPacketRouter : public PacketRouter {
public:
- MOCK_METHOD1(SendFeedback, bool(rtcp::TransportFeedback* packet));
+ MOCK_METHOD1(SendFeedback, bool(rtcp::TransportFeedback* feedback_packet));
};
class RemoteEstimatorProxyTest : public ::testing::Test {
@@ -49,33 +77,18 @@ class RemoteEstimatorProxyTest : public ::testing::Test {
SimulatedClock clock_;
testing::StrictMock<MockPacketRouter> router_;
RemoteEstimatorProxy proxy_;
-
- const size_t kDefaultPacketSize = 100;
- const uint32_t kMediaSsrc = 456;
- const uint16_t kBaseSeq = 10;
- const int64_t kBaseTimeMs = 123;
- const int64_t kMaxSmallDeltaMs =
- (rtcp::TransportFeedback::kDeltaScaleFactor * 0xFF) / 1000;
};
TEST_F(RemoteEstimatorProxyTest, SendsSinglePacketFeedback) {
IncomingPacket(kBaseSeq, kBaseTimeMs);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<rtcp::TransportFeedback::StatusSymbol> status_vec =
- packet->GetStatusVector();
- EXPECT_EQ(1u, status_vec.size());
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[0]);
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq));
+ EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs));
return true;
}));
@@ -87,20 +100,12 @@ TEST_F(RemoteEstimatorProxyTest, DuplicatedPackets) {
IncomingPacket(kBaseSeq, kBaseTimeMs + 1000);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<rtcp::TransportFeedback::StatusSymbol> status_vec =
- packet->GetStatusVector();
- EXPECT_EQ(1u, status_vec.size());
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[0]);
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq));
+ EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs));
return true;
}));
@@ -111,30 +116,21 @@ TEST_F(RemoteEstimatorProxyTest, FeedbackWithMissingStart) {
// First feedback.
IncomingPacket(kBaseSeq, kBaseTimeMs);
IncomingPacket(kBaseSeq + 1, kBaseTimeMs + 1000);
- EXPECT_CALL(router_, SendFeedback(_)).Times(1).WillOnce(Return(true));
+ EXPECT_CALL(router_, SendFeedback(_)).WillOnce(Return(true));
Process();
// Second feedback starts with a missing packet (DROP kBaseSeq + 2).
IncomingPacket(kBaseSeq + 3, kBaseTimeMs + 3000);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq + 2, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<rtcp::TransportFeedback::StatusSymbol> status_vec =
- packet->GetStatusVector();
- EXPECT_EQ(2u, status_vec.size());
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kNotReceived,
- status_vec[0]);
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[1]);
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs + 3000,
- (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq + 2, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet),
+ ElementsAre(kBaseSeq + 3));
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kBaseTimeMs + 3000));
return true;
}));
@@ -147,27 +143,15 @@ TEST_F(RemoteEstimatorProxyTest, SendsFeedbackWithVaryingDeltas) {
IncomingPacket(kBaseSeq + 2, kBaseTimeMs + (2 * kMaxSmallDeltaMs) + 1);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<rtcp::TransportFeedback::StatusSymbol> status_vec =
- packet->GetStatusVector();
- EXPECT_EQ(3u, status_vec.size());
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[0]);
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[1]);
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedLargeDelta,
- status_vec[2]);
-
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(3u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
- EXPECT_EQ(kMaxSmallDeltaMs, delta_vec[1] / 1000);
- EXPECT_EQ(kMaxSmallDeltaMs + 1, delta_vec[2] / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet),
+ ElementsAre(kBaseSeq, kBaseSeq + 1, kBaseSeq + 2));
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kBaseTimeMs, kBaseTimeMs + kMaxSmallDeltaMs,
+ kBaseTimeMs + (2 * kMaxSmallDeltaMs) + 1));
return true;
}));
@@ -175,51 +159,31 @@ TEST_F(RemoteEstimatorProxyTest, SendsFeedbackWithVaryingDeltas) {
}
TEST_F(RemoteEstimatorProxyTest, SendsFragmentedFeedback) {
- const int64_t kTooLargeDelta =
+ static constexpr int64_t kTooLargeDelta =
rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 16);
IncomingPacket(kBaseSeq, kBaseTimeMs);
IncomingPacket(kBaseSeq + 1, kBaseTimeMs + kTooLargeDelta);
- InSequence s;
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([kTooLargeDelta, this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<rtcp::TransportFeedback::StatusSymbol> status_vec =
- packet->GetStatusVector();
- EXPECT_EQ(1u, status_vec.size());
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[0]);
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
- return true;
- }))
- .RetiresOnSaturation();
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
- EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([kTooLargeDelta, this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq + 1, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<rtcp::TransportFeedback::StatusSymbol> status_vec =
- packet->GetStatusVector();
- EXPECT_EQ(1u, status_vec.size());
- EXPECT_EQ(rtcp::TransportFeedback::StatusSymbol::kReceivedSmallDelta,
- status_vec[0]);
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs + kTooLargeDelta,
- (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
+ EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq));
+ EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs));
return true;
}))
- .RetiresOnSaturation();
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq + 1, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet),
+ ElementsAre(kBaseSeq + 1));
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kBaseTimeMs + kTooLargeDelta));
+ return true;
+ }));
Process();
}
@@ -231,15 +195,11 @@ TEST_F(RemoteEstimatorProxyTest, GracefullyHandlesReorderingAndWrap) {
IncomingPacket(kLargeSeq, kBaseTimeMs + kDeltaMs);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs));
return true;
}));
@@ -251,16 +211,14 @@ TEST_F(RemoteEstimatorProxyTest, ResendsTimestampsOnReordering) {
IncomingPacket(kBaseSeq + 2, kBaseTimeMs + 2);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(2u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
- EXPECT_EQ(2, delta_vec[1] / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet),
+ ElementsAre(kBaseSeq, kBaseSeq + 2));
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kBaseTimeMs, kBaseTimeMs + 2));
return true;
}));
@@ -269,17 +227,14 @@ TEST_F(RemoteEstimatorProxyTest, ResendsTimestampsOnReordering) {
IncomingPacket(kBaseSeq + 1, kBaseTimeMs + 1);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq + 1, packet->GetBaseSequence());
- EXPECT_EQ(kMediaSsrc, packet->media_ssrc());
-
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(2u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs + 1,
- (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
- EXPECT_EQ(1, delta_vec[1] / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq + 1, feedback_packet->GetBaseSequence());
+ EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet),
+ ElementsAre(kBaseSeq + 1, kBaseSeq + 2));
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kBaseTimeMs + 1, kBaseTimeMs + 2));
return true;
}));
@@ -293,14 +248,10 @@ TEST_F(RemoteEstimatorProxyTest, RemovesTimestampsOutOfScope) {
IncomingPacket(kBaseSeq + 2, kBaseTimeMs);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([kTimeoutTimeMs, this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq + 2, packet->GetBaseSequence());
-
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
+ .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq + 2, feedback_packet->GetBaseSequence());
+
+ EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs));
return true;
}));
@@ -309,17 +260,14 @@ TEST_F(RemoteEstimatorProxyTest, RemovesTimestampsOutOfScope) {
IncomingPacket(kBaseSeq + 3, kTimeoutTimeMs); // kBaseSeq + 2 times out here.
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([kTimeoutTimeMs, this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq + 3, packet->GetBaseSequence());
-
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(1u, delta_vec.size());
- EXPECT_EQ(kTimeoutTimeMs,
- (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
- return true;
- }));
+ .WillOnce(
+ Invoke([kTimeoutTimeMs](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq + 3, feedback_packet->GetBaseSequence());
+
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kTimeoutTimeMs));
+ return true;
+ }));
Process();
@@ -329,23 +277,17 @@ TEST_F(RemoteEstimatorProxyTest, RemovesTimestampsOutOfScope) {
IncomingPacket(kBaseSeq + 1, kTimeoutTimeMs - 1);
EXPECT_CALL(router_, SendFeedback(_))
- .Times(1)
- .WillOnce(Invoke([kTimeoutTimeMs, this](rtcp::TransportFeedback* packet) {
- packet->Build();
- EXPECT_EQ(kBaseSeq, packet->GetBaseSequence());
-
- // Four status entries (kBaseSeq + 3 missing).
- EXPECT_EQ(4u, packet->GetStatusVector().size());
-
- // Only three actual timestamps.
- std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs();
- EXPECT_EQ(3u, delta_vec.size());
- EXPECT_EQ(kBaseTimeMs - 1,
- (packet->GetBaseTimeUs() + delta_vec[0]) / 1000);
- EXPECT_EQ(kTimeoutTimeMs - kBaseTimeMs, delta_vec[1] / 1000);
- EXPECT_EQ(1, delta_vec[2] / 1000);
- return true;
- }));
+ .WillOnce(
+ Invoke([kTimeoutTimeMs](rtcp::TransportFeedback* feedback_packet) {
+ EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence());
+
+ EXPECT_THAT(SequenceNumbers(*feedback_packet),
+ ElementsAre(kBaseSeq, kBaseSeq + 1, kBaseSeq + 3));
+ EXPECT_THAT(TimestampsMs(*feedback_packet),
+ ElementsAre(kBaseTimeMs - 1, kTimeoutTimeMs - 1,
+ kTimeoutTimeMs));
+ return true;
+ }));
Process();
}
@@ -391,4 +333,5 @@ TEST_F(RemoteEstimatorProxyTest, TwccReportsUse5PercentOfAvailableBandwidth) {
EXPECT_EQ(136, proxy_.TimeUntilNextProcess());
}
+} // namespace
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698