blob: 14f53b73b842ff0af8b56ea8124f4046397abf3d [file] [log] [blame]
Irfan Sheriffb2540bb2016-09-12 12:28:54 -07001/*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10#include <memory>
11
Danil Chapovalovbda50682018-02-14 09:08:28 +000012#include "modules/congestion_controller/probe_controller.h"
Sebastian Janssonea86bb72018-02-14 16:53:38 +000013#include "modules/pacing/mock/mock_paced_sender.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "rtc_base/logging.h"
15#include "system_wrappers/include/clock.h"
16#include "test/gmock.h"
17#include "test/gtest.h"
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070018
19using testing::_;
20using testing::AtLeast;
21using testing::NiceMock;
sergeyu80ed35e2016-11-28 13:11:13 -080022using testing::Return;
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070023
24namespace webrtc {
25namespace test {
26
27namespace {
28
29constexpr int kMinBitrateBps = 100;
30constexpr int kStartBitrateBps = 300;
sergeyu07c147d2016-11-03 11:59:50 -070031constexpr int kMaxBitrateBps = 10000;
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070032
Irfan Sheriff9b7b7532016-09-16 11:30:44 -070033constexpr int kExponentialProbingTimeoutMs = 5000;
34
sergeyu80ed35e2016-11-28 13:11:13 -080035constexpr int kAlrProbeInterval = 5000;
terelius3376c842017-07-31 04:23:25 -070036constexpr int kAlrEndedTimeoutMs = 3000;
37constexpr int kBitrateDropTimeoutMs = 5000;
sergeyu80ed35e2016-11-28 13:11:13 -080038
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070039} // namespace
40
Sebastian Jansson56da2f72018-02-28 13:07:28 +010041class LegacyProbeControllerTest : public ::testing::Test {
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070042 protected:
Sebastian Jansson56da2f72018-02-28 13:07:28 +010043 LegacyProbeControllerTest() : clock_(100000000L) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +000044 probe_controller_.reset(new ProbeController(&pacer_, &clock_));
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070045 }
Sebastian Jansson56da2f72018-02-28 13:07:28 +010046 ~LegacyProbeControllerTest() override {}
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070047
philipeldb4fa4b2018-03-06 18:29:22 +010048 const int64_t kMbpsMultiplier = 1000000;
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070049 SimulatedClock clock_;
Sebastian Janssonea86bb72018-02-14 16:53:38 +000050 NiceMock<MockPacedSender> pacer_;
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070051 std::unique_ptr<ProbeController> probe_controller_;
52};
53
Sebastian Jansson56da2f72018-02-28 13:07:28 +010054TEST_F(LegacyProbeControllerTest, InitiatesProbingAtStart) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +000055 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(AtLeast(2));
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070056 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +000057 kMaxBitrateBps);
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070058}
59
Sebastian Jansson56da2f72018-02-28 13:07:28 +010060TEST_F(LegacyProbeControllerTest, ProbeOnlyWhenNetworkIsUp) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +000061 probe_controller_->OnNetworkStateChanged(kNetworkDown);
62 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
Sergey Ulanove2b15012016-11-22 16:08:30 -080063 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +000064 kMaxBitrateBps);
Sergey Ulanove2b15012016-11-22 16:08:30 -080065
Sebastian Janssonea86bb72018-02-14 16:53:38 +000066 testing::Mock::VerifyAndClearExpectations(&pacer_);
67 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(AtLeast(2));
68 probe_controller_->OnNetworkStateChanged(kNetworkUp);
Sergey Ulanove2b15012016-11-22 16:08:30 -080069}
70
Sebastian Jansson56da2f72018-02-28 13:07:28 +010071TEST_F(LegacyProbeControllerTest, InitiatesProbingOnMaxBitrateIncrease) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +000072 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(AtLeast(2));
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070073 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +000074 kMaxBitrateBps);
Irfan Sheriff9b7b7532016-09-16 11:30:44 -070075 // Long enough to time out exponential probing.
76 clock_.AdvanceTimeMilliseconds(kExponentialProbingTimeoutMs);
Sebastian Janssonea86bb72018-02-14 16:53:38 +000077 probe_controller_->SetEstimatedBitrate(kStartBitrateBps);
78 probe_controller_->Process();
Irfan Sheriff9b7b7532016-09-16 11:30:44 -070079
Sebastian Janssonea86bb72018-02-14 16:53:38 +000080 EXPECT_CALL(pacer_, CreateProbeCluster(kMaxBitrateBps + 100));
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070081 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +000082 kMaxBitrateBps + 100);
Irfan Sheriffb2540bb2016-09-12 12:28:54 -070083}
84
Sebastian Jansson56da2f72018-02-28 13:07:28 +010085TEST_F(LegacyProbeControllerTest,
86 InitiatesProbingOnMaxBitrateIncreaseAtMaxBitrate) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +000087 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(AtLeast(2));
philipelda5e9d02017-01-17 02:08:28 -080088 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +000089 kMaxBitrateBps);
philipelda5e9d02017-01-17 02:08:28 -080090 // Long enough to time out exponential probing.
91 clock_.AdvanceTimeMilliseconds(kExponentialProbingTimeoutMs);
Sebastian Janssonea86bb72018-02-14 16:53:38 +000092 probe_controller_->SetEstimatedBitrate(kStartBitrateBps);
93 probe_controller_->Process();
philipelda5e9d02017-01-17 02:08:28 -080094
Sebastian Janssonea86bb72018-02-14 16:53:38 +000095 probe_controller_->SetEstimatedBitrate(kMaxBitrateBps);
96 EXPECT_CALL(pacer_, CreateProbeCluster(kMaxBitrateBps + 100));
philipelda5e9d02017-01-17 02:08:28 -080097 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +000098 kMaxBitrateBps + 100);
philipelda5e9d02017-01-17 02:08:28 -080099}
100
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100101TEST_F(LegacyProbeControllerTest, TestExponentialProbing) {
Irfan Sheriffb2540bb2016-09-12 12:28:54 -0700102 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000103 kMaxBitrateBps);
sergeyu07c147d2016-11-03 11:59:50 -0700104
sergeyu5bc39452016-12-15 10:42:09 -0800105 // Repeated probe should only be sent when estimated bitrate climbs above
106 // 0.7 * 6 * kStartBitrateBps = 1260.
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000107 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
108 probe_controller_->SetEstimatedBitrate(1000);
109 testing::Mock::VerifyAndClearExpectations(&pacer_);
sergeyu9cef11b2016-12-02 11:03:01 -0800110
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000111 EXPECT_CALL(pacer_, CreateProbeCluster(2 * 1800));
112 probe_controller_->SetEstimatedBitrate(1800);
Irfan Sheriffb2540bb2016-09-12 12:28:54 -0700113}
114
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100115TEST_F(LegacyProbeControllerTest, TestExponentialProbingTimeout) {
Irfan Sheriffb2540bb2016-09-12 12:28:54 -0700116 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000117 kMaxBitrateBps);
Irfan Sheriffb2540bb2016-09-12 12:28:54 -0700118
119 // Advance far enough to cause a time out in waiting for probing result.
Irfan Sheriff9b7b7532016-09-16 11:30:44 -0700120 clock_.AdvanceTimeMilliseconds(kExponentialProbingTimeoutMs);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000121 probe_controller_->Process();
sergeyu9cef11b2016-12-02 11:03:01 -0800122
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000123 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
124 probe_controller_->SetEstimatedBitrate(1800);
Irfan Sheriffb2540bb2016-09-12 12:28:54 -0700125}
126
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100127TEST_F(LegacyProbeControllerTest, RequestProbeInAlr) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000128 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(2);
sergeyu80ed35e2016-11-28 13:11:13 -0800129 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000130 kMaxBitrateBps);
131 probe_controller_->SetEstimatedBitrate(500);
132 testing::Mock::VerifyAndClearExpectations(&pacer_);
133 EXPECT_CALL(pacer_, CreateProbeCluster(0.85 * 500)).Times(1);
134 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
135 .WillRepeatedly(Return(clock_.TimeInMilliseconds()));
sergeyu80ed35e2016-11-28 13:11:13 -0800136 clock_.AdvanceTimeMilliseconds(kAlrProbeInterval + 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000137 probe_controller_->Process();
138 probe_controller_->SetEstimatedBitrate(250);
139 probe_controller_->RequestProbe();
terelius3376c842017-07-31 04:23:25 -0700140}
141
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100142TEST_F(LegacyProbeControllerTest, RequestProbeWhenAlrEndedRecently) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000143 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(2);
terelius3376c842017-07-31 04:23:25 -0700144 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000145 kMaxBitrateBps);
146 probe_controller_->SetEstimatedBitrate(500);
147 testing::Mock::VerifyAndClearExpectations(&pacer_);
148 EXPECT_CALL(pacer_, CreateProbeCluster(0.85 * 500)).Times(1);
149 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
Danil Chapovalov0040b662018-06-18 10:48:16 +0200150 .WillRepeatedly(Return(absl::nullopt));
terelius3376c842017-07-31 04:23:25 -0700151 clock_.AdvanceTimeMilliseconds(kAlrProbeInterval + 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000152 probe_controller_->Process();
153 probe_controller_->SetEstimatedBitrate(250);
terelius3376c842017-07-31 04:23:25 -0700154 probe_controller_->SetAlrEndedTimeMs(clock_.TimeInMilliseconds());
155 clock_.AdvanceTimeMilliseconds(kAlrEndedTimeoutMs - 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000156 probe_controller_->RequestProbe();
terelius3376c842017-07-31 04:23:25 -0700157}
158
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100159TEST_F(LegacyProbeControllerTest, RequestProbeWhenAlrNotEndedRecently) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000160 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(2);
terelius3376c842017-07-31 04:23:25 -0700161 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000162 kMaxBitrateBps);
163 probe_controller_->SetEstimatedBitrate(500);
164 testing::Mock::VerifyAndClearExpectations(&pacer_);
165 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
166 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
Danil Chapovalov0040b662018-06-18 10:48:16 +0200167 .WillRepeatedly(Return(absl::nullopt));
terelius3376c842017-07-31 04:23:25 -0700168 clock_.AdvanceTimeMilliseconds(kAlrProbeInterval + 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000169 probe_controller_->Process();
170 probe_controller_->SetEstimatedBitrate(250);
terelius3376c842017-07-31 04:23:25 -0700171 probe_controller_->SetAlrEndedTimeMs(clock_.TimeInMilliseconds());
172 clock_.AdvanceTimeMilliseconds(kAlrEndedTimeoutMs + 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000173 probe_controller_->RequestProbe();
terelius3376c842017-07-31 04:23:25 -0700174}
175
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100176TEST_F(LegacyProbeControllerTest, RequestProbeWhenBweDropNotRecent) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000177 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(2);
terelius3376c842017-07-31 04:23:25 -0700178 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000179 kMaxBitrateBps);
180 probe_controller_->SetEstimatedBitrate(500);
181 testing::Mock::VerifyAndClearExpectations(&pacer_);
182 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
183 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
184 .WillRepeatedly(Return(clock_.TimeInMilliseconds()));
terelius3376c842017-07-31 04:23:25 -0700185 clock_.AdvanceTimeMilliseconds(kAlrProbeInterval + 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000186 probe_controller_->Process();
187 probe_controller_->SetEstimatedBitrate(250);
terelius3376c842017-07-31 04:23:25 -0700188 clock_.AdvanceTimeMilliseconds(kBitrateDropTimeoutMs + 1);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000189 probe_controller_->RequestProbe();
sergeyu80ed35e2016-11-28 13:11:13 -0800190}
191
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100192TEST_F(LegacyProbeControllerTest, PeriodicProbing) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000193 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(2);
sergeyu80ed35e2016-11-28 13:11:13 -0800194 probe_controller_->EnablePeriodicAlrProbing(true);
195 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000196 kMaxBitrateBps);
197 probe_controller_->SetEstimatedBitrate(500);
198 testing::Mock::VerifyAndClearExpectations(&pacer_);
sergeyu80ed35e2016-11-28 13:11:13 -0800199
200 int64_t start_time = clock_.TimeInMilliseconds();
201
202 // Expect the controller to send a new probe after 5s has passed.
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000203 EXPECT_CALL(pacer_, CreateProbeCluster(1000)).Times(1);
204 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
205 .WillRepeatedly(Return(start_time));
sergeyu80ed35e2016-11-28 13:11:13 -0800206 clock_.AdvanceTimeMilliseconds(5000);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000207 probe_controller_->Process();
208 probe_controller_->SetEstimatedBitrate(500);
209 testing::Mock::VerifyAndClearExpectations(&pacer_);
sergeyu80ed35e2016-11-28 13:11:13 -0800210
211 // The following probe should be sent at 10s into ALR.
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000212 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
213 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
214 .WillRepeatedly(Return(start_time));
sergeyu80ed35e2016-11-28 13:11:13 -0800215 clock_.AdvanceTimeMilliseconds(4000);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000216 probe_controller_->Process();
217 probe_controller_->SetEstimatedBitrate(500);
218 testing::Mock::VerifyAndClearExpectations(&pacer_);
sergeyu80ed35e2016-11-28 13:11:13 -0800219
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000220 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(1);
221 EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
222 .WillRepeatedly(Return(start_time));
sergeyu80ed35e2016-11-28 13:11:13 -0800223 clock_.AdvanceTimeMilliseconds(1000);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000224 probe_controller_->Process();
225 probe_controller_->SetEstimatedBitrate(500);
226 testing::Mock::VerifyAndClearExpectations(&pacer_);
sergeyu80ed35e2016-11-28 13:11:13 -0800227}
228
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100229TEST_F(LegacyProbeControllerTest, PeriodicProbingAfterReset) {
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000230 testing::StrictMock<MockPacedSender> local_pacer;
231 probe_controller_.reset(new ProbeController(&local_pacer, &clock_));
philipeld1d247f2017-05-04 08:35:52 -0700232 int64_t alr_start_time = clock_.TimeInMilliseconds();
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000233 EXPECT_CALL(local_pacer, GetApplicationLimitedRegionStartTime())
234 .WillRepeatedly(Return(alr_start_time));
philipeld1d247f2017-05-04 08:35:52 -0700235
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000236 EXPECT_CALL(local_pacer, CreateProbeCluster(_)).Times(2);
philipeld1d247f2017-05-04 08:35:52 -0700237 probe_controller_->EnablePeriodicAlrProbing(true);
238 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000239 kMaxBitrateBps);
240 probe_controller_->Reset();
philipeld1d247f2017-05-04 08:35:52 -0700241
242 clock_.AdvanceTimeMilliseconds(10000);
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000243 probe_controller_->Process();
philipeld1d247f2017-05-04 08:35:52 -0700244
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000245 EXPECT_CALL(local_pacer, CreateProbeCluster(_)).Times(2);
philipeld1d247f2017-05-04 08:35:52 -0700246 probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000247 kMaxBitrateBps);
philipeld1d247f2017-05-04 08:35:52 -0700248
249 // Make sure we use |kStartBitrateBps| as the estimated bitrate
250 // until SetEstimatedBitrate is called with an updated estimate.
251 clock_.AdvanceTimeMilliseconds(10000);
Yves Gerey665174f2018-06-19 15:03:05 +0200252 EXPECT_CALL(local_pacer, CreateProbeCluster(kStartBitrateBps * 2));
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000253 probe_controller_->Process();
philipeld1d247f2017-05-04 08:35:52 -0700254}
255
Sebastian Jansson56da2f72018-02-28 13:07:28 +0100256TEST_F(LegacyProbeControllerTest, TestExponentialProbingOverflow) {
sergeyu5bc39452016-12-15 10:42:09 -0800257 probe_controller_->SetBitrates(kMinBitrateBps, 10 * kMbpsMultiplier,
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000258 100 * kMbpsMultiplier);
sergeyu5bc39452016-12-15 10:42:09 -0800259
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000260 // Verify that probe bitrate is capped at the specified max bitrate
261 EXPECT_CALL(pacer_, CreateProbeCluster(100 * kMbpsMultiplier));
262 probe_controller_->SetEstimatedBitrate(60 * kMbpsMultiplier);
263 testing::Mock::VerifyAndClearExpectations(&pacer_);
sergeyu5bc39452016-12-15 10:42:09 -0800264
265 // Verify that repeated probes aren't sent.
Sebastian Janssonea86bb72018-02-14 16:53:38 +0000266 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
267 probe_controller_->SetEstimatedBitrate(100 * kMbpsMultiplier);
sergeyu5bc39452016-12-15 10:42:09 -0800268}
269
philipeldb4fa4b2018-03-06 18:29:22 +0100270TEST_F(LegacyProbeControllerTest, TotalBitrateProbing) {
271 probe_controller_->SetBitrates(kMinBitrateBps, 1 * kMbpsMultiplier,
272 2 * kMbpsMultiplier);
273
274 EXPECT_CALL(pacer_, CreateProbeCluster(1 * kMbpsMultiplier));
275 probe_controller_->SetEstimatedBitrate(500000);
276 probe_controller_->OnMaxTotalAllocatedBitrate(1 * kMbpsMultiplier);
277}
278
279TEST_F(LegacyProbeControllerTest, TotalBitrateNoProbing) {
280 probe_controller_->SetBitrates(kMinBitrateBps, 1 * kMbpsMultiplier,
281 2 * kMbpsMultiplier);
282
283 EXPECT_CALL(pacer_, CreateProbeCluster(_)).Times(0);
284 probe_controller_->SetEstimatedBitrate(500000);
285 probe_controller_->OnMaxTotalAllocatedBitrate(250000);
286}
287
Irfan Sheriffb2540bb2016-09-12 12:28:54 -0700288} // namespace test
289} // namespace webrtc