Simple tests for Call::SetBitrateConfig.

This will enable safer refactoring of SetBitrateConfig when we add methods to control BWE from PeerConnection (https://codereview.chromium.org/2838233002/).

BUG=webrtc:7395

Review-Url: https://codereview.webrtc.org/2870383003
Cr-Commit-Position: refs/heads/master@{#18187}
This commit is contained in:
zstein 2017-05-17 11:49:12 -07:00 committed by Commit bot
parent 12fa8f444c
commit 8c96a148a8
3 changed files with 102 additions and 18 deletions

View File

@ -134,7 +134,7 @@ struct ConfigHelper {
nullptr /* observer */,
&event_log_,
&packet_router_)),
fake_transport_(send_side_cc_.get()),
fake_transport_(&packet_router_, send_side_cc_.get()),
bitrate_allocator_(&limit_observer_),
worker_queue_("ConfigHelper_worker_queue") {
using testing::Invoke;

View File

@ -309,27 +309,110 @@ TEST(CallTest, MultipleFlexfecReceiveStreamsProtectingSingleVideoStream) {
}
}
// TODO(zstein): This is just a motivating example for
// MockSendSideCongestionController. It should be deleted once we have more
// meaningful tests.
TEST(CallTest, MockSendSideCongestionControllerExample) {
RtcEventLogNullImpl event_log;
Call::Config config(&event_log);
namespace {
struct CallBitrateHelper {
CallBitrateHelper() : CallBitrateHelper(Call::Config(&event_log_)) {}
SimulatedClock clock(123456);
PacketRouter packet_router;
testing::NiceMock<test::MockSendSideCongestionController> mock_cc(
&clock, &event_log, &packet_router);
auto transport_send =
rtc::MakeUnique<FakeRtpTransportControllerSend>(&mock_cc);
std::unique_ptr<Call> call(Call::Create(config, std::move(transport_send)));
explicit CallBitrateHelper(const Call::Config& config)
: mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_),
call_(Call::Create(
config,
rtc::MakeUnique<FakeRtpTransportControllerSend>(&packet_router_,
&mock_cc_))) {}
webrtc::Call* operator->() { return call_.get(); }
testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() {
return mock_cc_;
}
private:
webrtc::RtcEventLogNullImpl event_log_;
PacketRouter packet_router_;
testing::NiceMock<test::MockSendSideCongestionController> mock_cc_;
std::unique_ptr<Call> call_;
};
} // namespace
TEST(CallBitrateTest, SetBitrateConfigWithValidConfigCallsSetBweBitrates) {
CallBitrateHelper call;
Call::Config::BitrateConfig bitrate_config;
bitrate_config.min_bitrate_bps = 1;
bitrate_config.start_bitrate_bps = 2;
bitrate_config.max_bitrate_bps = 3;
EXPECT_CALL(mock_cc, SetBweBitrates(1, 2, 3));
EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3));
call->SetBitrateConfig(bitrate_config);
}
TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) {
CallBitrateHelper call;
Call::Config::BitrateConfig bitrate_config;
bitrate_config.min_bitrate_bps = 10;
bitrate_config.start_bitrate_bps = 20;
bitrate_config.max_bitrate_bps = 30;
call->SetBitrateConfig(bitrate_config);
bitrate_config.min_bitrate_bps = 11;
EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, 20, 30));
call->SetBitrateConfig(bitrate_config);
}
TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) {
CallBitrateHelper call;
Call::Config::BitrateConfig bitrate_config;
bitrate_config.min_bitrate_bps = 10;
bitrate_config.start_bitrate_bps = 20;
bitrate_config.max_bitrate_bps = 30;
call->SetBitrateConfig(bitrate_config);
bitrate_config.start_bitrate_bps = 21;
EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30));
call->SetBitrateConfig(bitrate_config);
}
TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) {
CallBitrateHelper call;
Call::Config::BitrateConfig bitrate_config;
bitrate_config.min_bitrate_bps = 10;
bitrate_config.start_bitrate_bps = 20;
bitrate_config.max_bitrate_bps = 30;
call->SetBitrateConfig(bitrate_config);
bitrate_config.max_bitrate_bps = 31;
EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 20, 31));
call->SetBitrateConfig(bitrate_config);
}
TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) {
CallBitrateHelper call;
Call::Config::BitrateConfig bitrate_config;
bitrate_config.min_bitrate_bps = 1;
bitrate_config.start_bitrate_bps = 2;
bitrate_config.max_bitrate_bps = 3;
EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1);
call->SetBitrateConfig(bitrate_config);
call->SetBitrateConfig(bitrate_config);
}
TEST(CallBitrateTest,
SetBitrateConfigWithSameMinMaxAndNegativeStartElidesSecondCall) {
CallBitrateHelper call;
Call::Config::BitrateConfig bitrate_config;
bitrate_config.min_bitrate_bps = 1;
bitrate_config.start_bitrate_bps = 2;
bitrate_config.max_bitrate_bps = 3;
EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1);
call->SetBitrateConfig(bitrate_config);
bitrate_config.start_bitrate_bps = -1;
call->SetBitrateConfig(bitrate_config);
}

View File

@ -21,12 +21,13 @@ class FakeRtpTransportControllerSend
: public RtpTransportControllerSendInterface {
public:
explicit FakeRtpTransportControllerSend(
PacketRouter* packet_router,
SendSideCongestionController* send_side_cc)
: send_side_cc_(send_side_cc) {
: packet_router_(packet_router), send_side_cc_(send_side_cc) {
RTC_DCHECK(send_side_cc);
}
PacketRouter* packet_router() override { return &packet_router_; }
PacketRouter* packet_router() override { return packet_router_; }
SendSideCongestionController* send_side_cc() override {
return send_side_cc_;
@ -39,7 +40,7 @@ class FakeRtpTransportControllerSend
RtpPacketSender* packet_sender() override { return send_side_cc_->pacer(); }
private:
PacketRouter packet_router_;
PacketRouter* packet_router_;
SendSideCongestionController* send_side_cc_;
};