blob: 4cbb747e516a2447077cb9f42b2091fa93ef8982 [file] [log] [blame]
mflodman@webrtc.org3be58632012-09-06 08:19:40 +00001/*
2 * Copyright (c) 2012 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
Elad Alon14d1c9d2019-04-08 14:16:17 +020011#include "video/encoder_rtcp_feedback.h"
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000012
sprangfda496a2017-06-15 04:21:07 -070013#include <memory>
14
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "test/gmock.h"
16#include "test/gtest.h"
Sebastian Jansson652dc912018-04-19 17:09:15 +020017#include "video/test/mock_video_stream_encoder.h"
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000018
wuchengli@chromium.org637c55f2014-05-28 07:00:51 +000019namespace webrtc {
wuchengli@chromium.org89e8ffb2014-05-27 14:12:58 +000020
perkj600246e2016-05-04 11:26:51 -070021class VieKeyRequestTest : public ::testing::Test {
22 public:
23 VieKeyRequestTest()
perkj26091b12016-09-01 01:17:40 -070024 : simulated_clock_(123456789),
Sebastian Jansson652dc912018-04-19 17:09:15 +020025 encoder_(),
Elad Alon14d1c9d2019-04-08 14:16:17 +020026 encoder_rtcp_feedback_(
perkj600246e2016-05-04 11:26:51 -070027 &simulated_clock_,
28 std::vector<uint32_t>(1, VieKeyRequestTest::kSsrc),
Tommi28e96532021-06-03 11:52:15 +020029 &encoder_,
30 nullptr) {}
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000031
perkj600246e2016-05-04 11:26:51 -070032 protected:
33 const uint32_t kSsrc = 1234;
sprang552c7c72017-02-13 04:41:45 -080034
perkj600246e2016-05-04 11:26:51 -070035 SimulatedClock simulated_clock_;
Mirko Bonadei6a489f22019-04-09 15:11:12 +020036 ::testing::StrictMock<MockVideoStreamEncoder> encoder_;
Elad Alon14d1c9d2019-04-08 14:16:17 +020037 EncoderRtcpFeedback encoder_rtcp_feedback_;
perkj600246e2016-05-04 11:26:51 -070038};
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000039
perkj600246e2016-05-04 11:26:51 -070040TEST_F(VieKeyRequestTest, CreateAndTriggerRequests) {
Niels Möller1c9aa1e2018-02-16 10:27:23 +010041 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
Elad Alon14d1c9d2019-04-08 14:16:17 +020042 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070043}
44
45TEST_F(VieKeyRequestTest, TooManyOnReceivedIntraFrameRequest) {
Niels Möller1c9aa1e2018-02-16 10:27:23 +010046 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
Elad Alon14d1c9d2019-04-08 14:16:17 +020047 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
48 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070049 simulated_clock_.AdvanceTimeMilliseconds(10);
Elad Alon14d1c9d2019-04-08 14:16:17 +020050 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070051
Niels Möller1c9aa1e2018-02-16 10:27:23 +010052 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
perkj600246e2016-05-04 11:26:51 -070053 simulated_clock_.AdvanceTimeMilliseconds(300);
Elad Alon14d1c9d2019-04-08 14:16:17 +020054 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
55 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
56 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
Niels Möllerfa89d842019-01-30 16:33:45 +010057}
58
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000059} // namespace webrtc