| Index: webrtc/modules/pacing/packet_router_unittest.cc
|
| diff --git a/webrtc/modules/pacing/packet_router_unittest.cc b/webrtc/modules/pacing/packet_router_unittest.cc
|
| index de3206688a5e98bec0a833ab0480fa854430fec4..c33f25ce930064c84ecb824c4f44472757f16e3d 100644
|
| --- a/webrtc/modules/pacing/packet_router_unittest.cc
|
| +++ b/webrtc/modules/pacing/packet_router_unittest.cc
|
| @@ -20,14 +20,6 @@
|
| #include "webrtc/test/gmock.h"
|
| #include "webrtc/test/gtest.h"
|
|
|
| -using ::testing::_;
|
| -using ::testing::AnyNumber;
|
| -using ::testing::Field;
|
| -using ::testing::NiceMock;
|
| -using ::testing::Return;
|
| -using ::testing::ReturnPointee;
|
| -using ::testing::SaveArg;
|
| -
|
| namespace webrtc {
|
|
|
| // TODO(eladalon): Restructure and/or replace the existing monolithic tests
|
| @@ -36,6 +28,18 @@ namespace webrtc {
|
| // (I'm not removing any tests during CL, so as to demonstrate no regressions.)
|
|
|
| namespace {
|
| +
|
| +using ::testing::_;
|
| +using ::testing::AnyNumber;
|
| +using ::testing::AtLeast;
|
| +using ::testing::Field;
|
| +using ::testing::Gt;
|
| +using ::testing::Le;
|
| +using ::testing::NiceMock;
|
| +using ::testing::Return;
|
| +using ::testing::ReturnPointee;
|
| +using ::testing::SaveArg;
|
| +
|
| constexpr int kProbeMinProbes = 5;
|
| constexpr int kProbeMinBytes = 1000;
|
|
|
| @@ -562,6 +566,146 @@ TEST(PacketRouterRembTest, OnlyOneRembForRepeatedOnReceiveBitrateChanged) {
|
| packet_router.RemoveSendRtpModule(&rtp);
|
| }
|
|
|
| +TEST(PacketRouterRembTest, SetMaxDesiredReceiveBitrateLimitsSetREMBData) {
|
| + rtc::ScopedFakeClock clock;
|
| + PacketRouter packet_router;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + NiceMock<MockRtpRtcpWithRembTracking> remb_sender;
|
| + constexpr bool remb_candidate = true;
|
| + packet_router.AddSendRtpModule(&remb_sender, remb_candidate);
|
| + ASSERT_TRUE(remb_sender.REMB());
|
| +
|
| + const uint32_t cap_bitrate = 100000;
|
| + EXPECT_CALL(remb_sender, SetREMBData(Le(cap_bitrate), _)).Times(AtLeast(1));
|
| + EXPECT_CALL(remb_sender, SetREMBData(Gt(cap_bitrate), _)).Times(0);
|
| +
|
| + const std::vector<uint32_t> ssrcs = {1234};
|
| + packet_router.SetMaxDesiredReceiveBitrate(cap_bitrate);
|
| + packet_router.OnReceiveBitrateChanged(ssrcs, cap_bitrate + 5000);
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + packet_router.OnReceiveBitrateChanged(ssrcs, cap_bitrate - 5000);
|
| +
|
| + // Test tear-down.
|
| + packet_router.RemoveSendRtpModule(&remb_sender);
|
| +}
|
| +
|
| +TEST(PacketRouterRembTest,
|
| + SetMaxDesiredReceiveBitrateTriggersRembWhenMoreRestrictive) {
|
| + rtc::ScopedFakeClock clock;
|
| + PacketRouter packet_router;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + NiceMock<MockRtpRtcpWithRembTracking> remb_sender;
|
| + constexpr bool remb_candidate = true;
|
| + packet_router.AddSendRtpModule(&remb_sender, remb_candidate);
|
| + ASSERT_TRUE(remb_sender.REMB());
|
| +
|
| + const uint32_t measured_bitrate_bps = 150000;
|
| + const uint32_t cap_bitrate_bps = measured_bitrate_bps - 5000;
|
| + const std::vector<uint32_t> ssrcs = {1234};
|
| + EXPECT_CALL(remb_sender, SetREMBData(measured_bitrate_bps, _));
|
| + packet_router.OnReceiveBitrateChanged(ssrcs, measured_bitrate_bps);
|
| +
|
| + EXPECT_CALL(remb_sender, SetREMBData(cap_bitrate_bps, _));
|
| + packet_router.SetMaxDesiredReceiveBitrate(cap_bitrate_bps);
|
| +
|
| + // Test tear-down.
|
| + packet_router.RemoveSendRtpModule(&remb_sender);
|
| +}
|
| +
|
| +TEST(PacketRouterRembTest,
|
| + SetMaxDesiredReceiveBitrateDoesNotTriggerRembWhenAsRestrictive) {
|
| + rtc::ScopedFakeClock clock;
|
| + PacketRouter packet_router;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + NiceMock<MockRtpRtcpWithRembTracking> remb_sender;
|
| + constexpr bool remb_candidate = true;
|
| + packet_router.AddSendRtpModule(&remb_sender, remb_candidate);
|
| + ASSERT_TRUE(remb_sender.REMB());
|
| +
|
| + const uint32_t measured_bitrate_bps = 150000;
|
| + const uint32_t cap_bitrate_bps = measured_bitrate_bps;
|
| + const std::vector<uint32_t> ssrcs = {1234};
|
| + EXPECT_CALL(remb_sender, SetREMBData(measured_bitrate_bps, _));
|
| + packet_router.OnReceiveBitrateChanged(ssrcs, measured_bitrate_bps);
|
| +
|
| + EXPECT_CALL(remb_sender, SetREMBData(_, _)).Times(0);
|
| + packet_router.SetMaxDesiredReceiveBitrate(cap_bitrate_bps);
|
| +
|
| + // Test tear-down.
|
| + packet_router.RemoveSendRtpModule(&remb_sender);
|
| +}
|
| +
|
| +TEST(PacketRouterRembTest,
|
| + SetMaxDesiredReceiveBitrateDoesNotTriggerRembWhenLessRestrictive) {
|
| + rtc::ScopedFakeClock clock;
|
| + PacketRouter packet_router;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + NiceMock<MockRtpRtcpWithRembTracking> remb_sender;
|
| + constexpr bool remb_candidate = true;
|
| + packet_router.AddSendRtpModule(&remb_sender, remb_candidate);
|
| + ASSERT_TRUE(remb_sender.REMB());
|
| +
|
| + const uint32_t measured_bitrate_bps = 150000;
|
| + const uint32_t cap_bitrate_bps = measured_bitrate_bps + 500;
|
| + const std::vector<uint32_t> ssrcs = {1234};
|
| + EXPECT_CALL(remb_sender, SetREMBData(measured_bitrate_bps, _));
|
| + packet_router.OnReceiveBitrateChanged(ssrcs, measured_bitrate_bps);
|
| +
|
| + EXPECT_CALL(remb_sender, SetREMBData(_, _)).Times(0);
|
| + packet_router.SetMaxDesiredReceiveBitrate(cap_bitrate_bps);
|
| +
|
| + // Test tear-down.
|
| + packet_router.RemoveSendRtpModule(&remb_sender);
|
| +}
|
| +
|
| +TEST(PacketRouterRembTest,
|
| + SetMaxDesiredReceiveBitrateTriggersRembWhenNoRecentMeasure) {
|
| + rtc::ScopedFakeClock clock;
|
| + PacketRouter packet_router;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + NiceMock<MockRtpRtcpWithRembTracking> remb_sender;
|
| + constexpr bool remb_candidate = true;
|
| + packet_router.AddSendRtpModule(&remb_sender, remb_candidate);
|
| + ASSERT_TRUE(remb_sender.REMB());
|
| +
|
| + const uint32_t measured_bitrate_bps = 150000;
|
| + const uint32_t cap_bitrate_bps = measured_bitrate_bps + 5000;
|
| + const std::vector<uint32_t> ssrcs = {1234};
|
| + EXPECT_CALL(remb_sender, SetREMBData(measured_bitrate_bps, _));
|
| + packet_router.OnReceiveBitrateChanged(ssrcs, measured_bitrate_bps);
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| +
|
| + EXPECT_CALL(remb_sender, SetREMBData(cap_bitrate_bps, _));
|
| + packet_router.SetMaxDesiredReceiveBitrate(cap_bitrate_bps);
|
| +
|
| + // Test tear-down.
|
| + packet_router.RemoveSendRtpModule(&remb_sender);
|
| +}
|
| +
|
| +TEST(PacketRouterRembTest,
|
| + SetMaxDesiredReceiveBitrateTriggersRembWhenNoMeasures) {
|
| + rtc::ScopedFakeClock clock;
|
| + PacketRouter packet_router;
|
| + clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
|
| + NiceMock<MockRtpRtcpWithRembTracking> remb_sender;
|
| + constexpr bool remb_candidate = true;
|
| + packet_router.AddSendRtpModule(&remb_sender, remb_candidate);
|
| + ASSERT_TRUE(remb_sender.REMB());
|
| +
|
| + // Set cap.
|
| + EXPECT_CALL(remb_sender, SetREMBData(100000, _)).Times(1);
|
| + packet_router.SetMaxDesiredReceiveBitrate(100000);
|
| + // Increase cap.
|
| + EXPECT_CALL(remb_sender, SetREMBData(200000, _)).Times(1);
|
| + packet_router.SetMaxDesiredReceiveBitrate(200000);
|
| + // Decrease cap.
|
| + EXPECT_CALL(remb_sender, SetREMBData(150000, _)).Times(1);
|
| + packet_router.SetMaxDesiredReceiveBitrate(150000);
|
| +
|
| + // Test tear-down.
|
| + packet_router.RemoveSendRtpModule(&remb_sender);
|
| +}
|
| +
|
| // Only register receiving modules and make sure we fallback to trigger a REMB
|
| // packet on this one.
|
| TEST(PacketRouterRembTest, NoSendingRtpModule) {
|
|
|