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..e90a25ecc2d737139f48571eae800e508ee54e21 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::_; |
eladalon
2017/08/03 12:59:02
Is this move meaningfull? We're inside of a .cc fi
danilchap
2017/08/03 14:16:19
yes, it is general policy, this style might help t
eladalon
2017/08/04 08:32:49
Acknowledged.
|
+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,128 @@ TEST(PacketRouterRembTest, OnlyOneRembForRepeatedOnReceiveBitrateChanged) { |
packet_router.RemoveSendRtpModule(&rtp); |
} |
+TEST(PacketRouterRembTest, SetMaxEstimatedBandwidthLimitsSetREMBData) { |
+ rtc::ScopedFakeClock clock; |
+ PacketRouter packet_router; |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ NiceMock<MockRtpRtcpWithRembTracking> remb_sender; |
+ packet_router.AddSendRtpModule(&remb_sender, /*remb_candidate=*/true); |
eladalon
2017/08/03 12:59:02
nit: Prefer keeping files self-consistent, and eit
danilchap
2017/08/03 14:16:19
changed to keep old style for consistency, thanks.
|
+ 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); |
eladalon
2017/08/03 12:59:02
On the one hand, you illuminate the intention of y
danilchap
2017/08/03 14:16:19
Acknowledged.
I do that in test below, where there
|
+ |
+ const std::vector<uint32_t> ssrcs = {1234}; |
+ packet_router.SetMaxEstimatedBandwidth(cap_bitrate); |
+ packet_router.OnReceiveBitrateChanged(ssrcs, cap_bitrate + 5000); |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ packet_router.OnReceiveBitrateChanged(ssrcs, cap_bitrate - 5000); |
+ // Cleanup. |
eladalon
2017/08/03 12:59:02
nit #1: Empty line before the cleanup block.
nit #
danilchap
2017/08/03 14:16:19
Done.
|
+ packet_router.RemoveSendRtpModule(&remb_sender); |
+} |
+ |
+TEST(PacketRouterRembTest, |
+ SetMaxEstimatedBandwidthTriggersRembWhenMoreRestrictive) { |
+ rtc::ScopedFakeClock clock; |
+ PacketRouter packet_router; |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ NiceMock<MockRtpRtcpWithRembTracking> remb_sender; |
+ packet_router.AddSendRtpModule(&remb_sender, /*remb_candidate=*/true); |
+ ASSERT_TRUE(remb_sender.REMB()); |
+ |
+ const std::vector<uint32_t> ssrcs = {1234}; |
+ EXPECT_CALL(remb_sender, SetREMBData(150000, _)); |
+ packet_router.OnReceiveBitrateChanged(ssrcs, 150000); |
+ |
+ EXPECT_CALL(remb_sender, SetREMBData(100000, _)); |
+ packet_router.SetMaxEstimatedBandwidth(100000); |
+ // Cleanup. |
+ packet_router.RemoveSendRtpModule(&remb_sender); |
+} |
+ |
+TEST(PacketRouterRembTest, |
+ SetMaxEstimatedBandwidthDoesNotTriggerRembWhenAsRestrictive) { |
+ rtc::ScopedFakeClock clock; |
+ PacketRouter packet_router; |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ NiceMock<MockRtpRtcpWithRembTracking> remb_sender; |
+ packet_router.AddSendRtpModule(&remb_sender, /*remb_candidate=*/true); |
+ ASSERT_TRUE(remb_sender.REMB()); |
+ |
+ const uint32_t measured_bitrate_bps = 150000; |
eladalon
2017/08/03 12:59:02
nit: constexpr
danilchap
2017/08/03 14:16:19
not sure why is it better in this case,
checked te
eladalon
2017/08/04 08:32:49
That could have been a good convention, but there
danilchap
2017/08/04 10:51:23
Acknowledged.
|
+ 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(measured_bitrate_bps, _)).Times(0); |
+ packet_router.SetMaxEstimatedBandwidth(measured_bitrate_bps); |
eladalon
2017/08/03 12:59:02
Suggestion - if you created another const(expr), c
danilchap
2017/08/03 14:16:18
Done.
|
+ // Cleanup. |
+ packet_router.RemoveSendRtpModule(&remb_sender); |
+} |
+ |
+TEST(PacketRouterRembTest, |
+ SetMaxEstimatedBandwidthDoesNotTriggerRembWhenLessRestrictive) { |
+ rtc::ScopedFakeClock clock; |
+ PacketRouter packet_router; |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ NiceMock<MockRtpRtcpWithRembTracking> remb_sender; |
+ packet_router.AddSendRtpModule(&remb_sender, /*remb_candidate=*/true); |
+ ASSERT_TRUE(remb_sender.REMB()); |
+ |
+ const uint32_t measured_bitrate_bps = 150000; |
+ 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(measured_bitrate_bps + 500, _)).Times(0); |
+ packet_router.SetMaxEstimatedBandwidth(measured_bitrate_bps + 500); |
+ // Cleanup. |
+ packet_router.RemoveSendRtpModule(&remb_sender); |
+} |
+ |
+TEST(PacketRouterRembTest, |
+ SetMaxEstimatedBandwidthTriggersRembWhenNoRecentMeasure) { |
+ rtc::ScopedFakeClock clock; |
+ PacketRouter packet_router; |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ NiceMock<MockRtpRtcpWithRembTracking> remb_sender; |
+ packet_router.AddSendRtpModule(&remb_sender, /*remb_candidate=*/true); |
+ ASSERT_TRUE(remb_sender.REMB()); |
+ |
+ const uint32_t measured_bitrate_bps = 150000; |
+ 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(measured_bitrate_bps + 500, _)); |
+ packet_router.SetMaxEstimatedBandwidth(measured_bitrate_bps + 500); |
+ // Cleanup. |
+ packet_router.RemoveSendRtpModule(&remb_sender); |
+} |
+ |
+TEST(PacketRouterRembTest, SetMaxEstimatedBandwidthTriggersRembWhenNoMeasures) { |
eladalon
2017/08/03 12:59:02
So this is intentional?
1. Might be good to docume
danilchap
2017/08/03 14:16:18
1. It sort of implicit - if you set a limit how mu
eladalon
2017/08/04 08:32:49
Acknowledged.
I've suggested a rephrasing next to
|
+ rtc::ScopedFakeClock clock; |
+ PacketRouter packet_router; |
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
+ NiceMock<MockRtpRtcpWithRembTracking> remb_sender; |
+ packet_router.AddSendRtpModule(&remb_sender, /*remb_candidate=*/true); |
+ ASSERT_TRUE(remb_sender.REMB()); |
+ |
+ // Set cap. |
+ EXPECT_CALL(remb_sender, SetREMBData(100000, _)).Times(1); |
+ packet_router.SetMaxEstimatedBandwidth(100000); |
+ // Increase cap. |
+ EXPECT_CALL(remb_sender, SetREMBData(200000, _)).Times(1); |
+ packet_router.SetMaxEstimatedBandwidth(200000); |
+ // Decrease cap. |
+ EXPECT_CALL(remb_sender, SetREMBData(150000, _)).Times(1); |
+ packet_router.SetMaxEstimatedBandwidth(150000); |
+ // Cleanup. |
+ 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) { |