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 9821568260c0cf82e0df7c97821409f162271246..90230064848fd9ebb5532325a1bf182798549251 100644 |
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc |
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc |
@@ -8,12 +8,17 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
+#include <memory> |
+#include <utility> |
+ |
+#include "webrtc/test/gmock.h" |
+#include "webrtc/test/gtest.h" |
+ |
+#include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h" |
#include "webrtc/modules/pacing/packet_router.h" |
#include "webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h" |
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" |
#include "webrtc/system_wrappers/include/clock.h" |
-#include "webrtc/test/gmock.h" |
-#include "webrtc/test/gtest.h" |
using ::testing::_; |
using ::testing::InSequence; |
@@ -29,7 +34,8 @@ class MockPacketRouter : public PacketRouter { |
class RemoteEstimatorProxyTest : public ::testing::Test { |
public: |
- RemoteEstimatorProxyTest() : clock_(0), proxy_(&clock_, &router_) {} |
+ RemoteEstimatorProxyTest() |
+ : clock_(0), proxy_(&clock_, &router_, &bitrate_controller_) {} |
protected: |
void IncomingPacket(uint16_t seq, int64_t time_ms) { |
@@ -41,13 +47,13 @@ class RemoteEstimatorProxyTest : public ::testing::Test { |
} |
void Process() { |
- clock_.AdvanceTimeMilliseconds( |
- RemoteEstimatorProxy::kDefaultProcessIntervalMs); |
+ clock_.AdvanceTimeMilliseconds(50); |
stefan-webrtc
2016/10/26 14:45:16
Why did you change this?
michaelt
2016/10/27 15:15:45
Because there is no default process interval. The
|
proxy_.Process(); |
} |
SimulatedClock clock_; |
testing::StrictMock<MockPacketRouter> router_; |
+ testing::StrictMock<test::MockBitrateController> bitrate_controller_; |
RemoteEstimatorProxy proxy_; |
const size_t kDefaultPacketSize = 100; |
@@ -350,4 +356,46 @@ TEST_F(RemoteEstimatorProxyTest, RemovesTimestampsOutOfScope) { |
Process(); |
} |
+TEST_F(RemoteEstimatorProxyTest, TimeUntilNextProcessIsZeroBeforeFirstProcess) { |
+ EXPECT_EQ(0, proxy_.TimeUntilNextProcess()); |
+} |
+ |
+TEST_F(RemoteEstimatorProxyTest, TimeUntilNextProcessIsMinIntervalOn300kbps) { |
+ EXPECT_CALL(bitrate_controller_, AvailableBandwidth(testing::NotNull())) |
+ .Times(1) |
+ .WillOnce(Invoke([](uint32_t* bitrate) { |
+ *bitrate = 300000; |
+ return false; |
+ })); |
+ |
+ Process(); |
+ EXPECT_EQ(RemoteEstimatorProxy::kMinSendIntervalMs, |
+ proxy_.TimeUntilNextProcess()); |
+} |
+ |
+TEST_F(RemoteEstimatorProxyTest, TimeUntilNextProcessIsMaxIntervalOn20kbps) { |
+ EXPECT_CALL(bitrate_controller_, AvailableBandwidth(testing::NotNull())) |
+ .Times(1) |
+ .WillOnce(Invoke([](uint32_t* bitrate) { |
+ *bitrate = 20000; |
+ return false; |
+ })); |
+ |
+ Process(); |
+ EXPECT_EQ(RemoteEstimatorProxy::kMaxSendIntervalMs, |
+ proxy_.TimeUntilNextProcess()); |
+} |
+ |
+TEST_F(RemoteEstimatorProxyTest, TwccReportsUse5PercentOfAvailableBandwidth) { |
+ EXPECT_CALL(bitrate_controller_, AvailableBandwidth(testing::NotNull())) |
+ .Times(1) |
+ .WillOnce(Invoke([](uint32_t* bitrate) { |
+ *bitrate = 80000; |
+ return false; |
+ })); |
+ Process(); |
+ // 80kbps * 0.05 = TwccReportSize(52B * 8b/B) * 1000ms / SendInterval(104ms) |
+ EXPECT_EQ(104, proxy_.TimeUntilNextProcess()); |
+} |
+ |
} // namespace webrtc |