| OLD | NEW | 
| (Empty) |  | 
 |    1 /* | 
 |    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  | 
 |   11 #include "testing/gmock/include/gmock/gmock.h" | 
 |   12 #include "testing/gtest/include/gtest/gtest.h" | 
 |   13 #include "webrtc/modules/pacing/mock/mock_paced_sender.h" | 
 |   14 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" | 
 |   15 #include "webrtc/modules/congestion_controller/include/mock/mock_congestion_cont
     roller.h" | 
 |   16 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
     te_observer.h" | 
 |   17 #include "webrtc/system_wrappers/include/clock.h" | 
 |   18  | 
 |   19 using testing::_; | 
 |   20 using testing::NiceMock; | 
 |   21 using testing::Return; | 
 |   22 using testing::SaveArg; | 
 |   23 using testing::StrictMock; | 
 |   24  | 
 |   25 namespace webrtc { | 
 |   26 namespace test { | 
 |   27  | 
 |   28 class CongestionControllerTest : public ::testing::Test { | 
 |   29  protected: | 
 |   30   CongestionControllerTest() : clock_(123456) {} | 
 |   31   ~CongestionControllerTest() override {} | 
 |   32  | 
 |   33   void SetUp() override { | 
 |   34     pacer_ = new NiceMock<MockPacedSender>(); | 
 |   35     std::unique_ptr<PacedSender> pacer(pacer_);  // Passes ownership. | 
 |   36     std::unique_ptr<PacketRouter> packet_router(new PacketRouter()); | 
 |   37     controller_.reset( | 
 |   38         new CongestionController(&clock_, &observer_, &remote_bitrate_observer_, | 
 |   39                                  std::move(packet_router), std::move(pacer))); | 
 |   40     bandwidth_observer_.reset( | 
 |   41         controller_->GetBitrateController()->CreateRtcpBandwidthObserver()); | 
 |   42  | 
 |   43     // Set the initial bitrate estimate and expect the |observer| and |pacer_| | 
 |   44     // to be updated. | 
 |   45     EXPECT_CALL(observer_, OnNetworkChanged(kInitialBitrateBps, _, _)); | 
 |   46     EXPECT_CALL(*pacer_, SetEstimatedBitrate(kInitialBitrateBps)); | 
 |   47     controller_->SetBweBitrates(0, kInitialBitrateBps, 5 * kInitialBitrateBps); | 
 |   48   } | 
 |   49  | 
 |   50   SimulatedClock clock_; | 
 |   51   StrictMock<MockCongestionObserver> observer_; | 
 |   52   NiceMock<MockPacedSender>* pacer_; | 
 |   53   NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_; | 
 |   54   std::unique_ptr<RtcpBandwidthObserver> bandwidth_observer_; | 
 |   55   std::unique_ptr<CongestionController> controller_; | 
 |   56   const uint32_t kInitialBitrateBps = 60000; | 
 |   57 }; | 
 |   58  | 
 |   59 TEST_F(CongestionControllerTest, OnNetworkChanged) { | 
 |   60   // Test no change. | 
 |   61   clock_.AdvanceTimeMilliseconds(25); | 
 |   62   controller_->Process(); | 
 |   63  | 
 |   64   EXPECT_CALL(observer_, OnNetworkChanged(kInitialBitrateBps * 2, _, _)); | 
 |   65   EXPECT_CALL(*pacer_, SetEstimatedBitrate(kInitialBitrateBps * 2)); | 
 |   66   bandwidth_observer_->OnReceivedEstimatedBitrate(kInitialBitrateBps * 2); | 
 |   67   clock_.AdvanceTimeMilliseconds(25); | 
 |   68   controller_->Process(); | 
 |   69  | 
 |   70   EXPECT_CALL(observer_, OnNetworkChanged(kInitialBitrateBps, _, _)); | 
 |   71   EXPECT_CALL(*pacer_, SetEstimatedBitrate(kInitialBitrateBps)); | 
 |   72   bandwidth_observer_->OnReceivedEstimatedBitrate(kInitialBitrateBps); | 
 |   73   clock_.AdvanceTimeMilliseconds(25); | 
 |   74   controller_->Process(); | 
 |   75 } | 
 |   76  | 
 |   77 TEST_F(CongestionControllerTest, OnSendQueueFull) { | 
 |   78   EXPECT_CALL(*pacer_, ExpectedQueueTimeMs()) | 
 |   79       .WillOnce(Return(PacedSender::kMaxQueueLengthMs + 1)); | 
 |   80  | 
 |   81   EXPECT_CALL(observer_, OnNetworkChanged(0, _, _)); | 
 |   82   controller_->Process(); | 
 |   83  | 
 |   84   // Let the pacer not be full next time the controller checks. | 
 |   85   EXPECT_CALL(*pacer_, ExpectedQueueTimeMs()) | 
 |   86       .WillOnce(Return(PacedSender::kMaxQueueLengthMs - 1)); | 
 |   87  | 
 |   88   EXPECT_CALL(observer_, OnNetworkChanged(kInitialBitrateBps, _, _)); | 
 |   89   controller_->Process(); | 
 |   90 } | 
 |   91  | 
 |   92 TEST_F(CongestionControllerTest, OnSendQueueFullAndEstimateChange) { | 
 |   93   EXPECT_CALL(*pacer_, ExpectedQueueTimeMs()) | 
 |   94       .WillOnce(Return(PacedSender::kMaxQueueLengthMs + 1)); | 
 |   95   EXPECT_CALL(observer_, OnNetworkChanged(0, _, _)); | 
 |   96   controller_->Process(); | 
 |   97  | 
 |   98   // Receive new estimate but let the queue still be full. | 
 |   99   bandwidth_observer_->OnReceivedEstimatedBitrate(kInitialBitrateBps * 2); | 
 |  100   EXPECT_CALL(*pacer_, ExpectedQueueTimeMs()) | 
 |  101       .WillOnce(Return(PacedSender::kMaxQueueLengthMs + 1)); | 
 |  102   //  The send pacer should get the new estimate though. | 
 |  103   EXPECT_CALL(*pacer_, SetEstimatedBitrate(kInitialBitrateBps * 2)); | 
 |  104   clock_.AdvanceTimeMilliseconds(25); | 
 |  105   controller_->Process(); | 
 |  106  | 
 |  107   // Let the pacer not be full next time the controller checks. | 
 |  108   // |OnNetworkChanged| should be called with the new estimate. | 
 |  109   EXPECT_CALL(*pacer_, ExpectedQueueTimeMs()) | 
 |  110       .WillOnce(Return(PacedSender::kMaxQueueLengthMs - 1)); | 
 |  111   EXPECT_CALL(observer_, OnNetworkChanged(kInitialBitrateBps * 2, _, _)); | 
 |  112   clock_.AdvanceTimeMilliseconds(25); | 
 |  113   controller_->Process(); | 
 |  114 } | 
 |  115  | 
 |  116 }  // namespace test | 
 |  117 }  // namespace webrtc | 
| OLD | NEW |