blob: 1ce387b9917d6328e207d51655c4b8bfbd34e7a4 [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +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 +000019using ::testing::NiceMock;
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000020
wuchengli@chromium.org637c55f2014-05-28 07:00:51 +000021namespace webrtc {
wuchengli@chromium.org89e8ffb2014-05-27 14:12:58 +000022
perkj600246e2016-05-04 11:26:51 -070023class VieKeyRequestTest : public ::testing::Test {
24 public:
25 VieKeyRequestTest()
perkj26091b12016-09-01 01:17:40 -070026 : simulated_clock_(123456789),
Sebastian Jansson652dc912018-04-19 17:09:15 +020027 encoder_(),
mflodman15d83572016-10-06 08:35:11 -070028 encoder_rtcp_feedback_(
perkj600246e2016-05-04 11:26:51 -070029 &simulated_clock_,
30 std::vector<uint32_t>(1, VieKeyRequestTest::kSsrc),
31 &encoder_) {}
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000032
perkj600246e2016-05-04 11:26:51 -070033 protected:
34 const uint32_t kSsrc = 1234;
sprang552c7c72017-02-13 04:41:45 -080035
perkj600246e2016-05-04 11:26:51 -070036 SimulatedClock simulated_clock_;
Sebastian Jansson652dc912018-04-19 17:09:15 +020037 testing::StrictMock<MockVideoStreamEncoder> encoder_;
mflodman15d83572016-10-06 08:35:11 -070038 EncoderRtcpFeedback encoder_rtcp_feedback_;
perkj600246e2016-05-04 11:26:51 -070039};
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000040
perkj600246e2016-05-04 11:26:51 -070041TEST_F(VieKeyRequestTest, CreateAndTriggerRequests) {
Niels Möller1c9aa1e2018-02-16 10:27:23 +010042 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
mflodman15d83572016-10-06 08:35:11 -070043 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070044}
45
46TEST_F(VieKeyRequestTest, TooManyOnReceivedIntraFrameRequest) {
Niels Möller1c9aa1e2018-02-16 10:27:23 +010047 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
mflodman15d83572016-10-06 08:35:11 -070048 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
49 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070050 simulated_clock_.AdvanceTimeMilliseconds(10);
mflodman15d83572016-10-06 08:35:11 -070051 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070052
Niels Möller1c9aa1e2018-02-16 10:27:23 +010053 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
perkj600246e2016-05-04 11:26:51 -070054 simulated_clock_.AdvanceTimeMilliseconds(300);
mflodman15d83572016-10-06 08:35:11 -070055 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
56 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
57 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000058}
59
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000060} // namespace webrtc