blob: 7edd09acd217c408a949bb0e2abedf75bc8172c7 [file] [log] [blame]
Ruslan Burakov428dcb22019-04-18 17:49:49 +02001/*
2 * Copyright 2019 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
Jonas Olssona4d87372019-07-05 19:08:33 +020011#include "pc/jitter_buffer_delay.h"
12
Ruslan Burakov428dcb22019-04-18 17:49:49 +020013#include <stdint.h>
14
15#include "absl/types/optional.h"
16#include "api/scoped_refptr.h"
Ruslan Burakov428dcb22019-04-18 17:49:49 +020017#include "pc/test/mock_delayable.h"
18#include "rtc_base/ref_counted_object.h"
19#include "rtc_base/thread.h"
20#include "test/gmock.h"
21#include "test/gtest.h"
22
23using ::testing::Return;
24
25namespace {
26constexpr int kSsrc = 1234;
27} // namespace
28
29namespace webrtc {
30
31class JitterBufferDelayTest : public ::testing::Test {
32 public:
33 JitterBufferDelayTest()
34 : delay_(new rtc::RefCountedObject<JitterBufferDelay>(
35 rtc::Thread::Current())) {}
36
37 protected:
38 rtc::scoped_refptr<JitterBufferDelayInterface> delay_;
39 MockDelayable delayable_;
40};
41
42TEST_F(JitterBufferDelayTest, Set) {
43 delay_->OnStart(&delayable_, kSsrc);
44
45 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 3000))
46 .WillOnce(Return(true));
47
48 // Delay in seconds.
49 delay_->Set(3.0);
50}
51
52TEST_F(JitterBufferDelayTest, Caching) {
53 // Check that value is cached before start.
54 delay_->Set(4.0);
55
56 // Check that cached value applied on the start.
57 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 4000))
58 .WillOnce(Return(true));
59 delay_->OnStart(&delayable_, kSsrc);
60}
61
62TEST_F(JitterBufferDelayTest, Clamping) {
63 delay_->OnStart(&delayable_, kSsrc);
64
65 // In current Jitter Buffer implementation (Audio or Video) maximum supported
66 // value is 10000 milliseconds.
67 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 10000))
68 .WillOnce(Return(true));
69 delay_->Set(10.5);
70
71 // Test int overflow.
72 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 10000))
73 .WillOnce(Return(true));
74 delay_->Set(21474836470.0);
75
76 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 0))
77 .WillOnce(Return(true));
78 delay_->Set(-21474836470.0);
79
80 // Boundary value in seconds to milliseconds conversion.
81 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 0))
82 .WillOnce(Return(true));
83 delay_->Set(0.0009);
84
85 EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 0))
86 .WillOnce(Return(true));
87
88 delay_->Set(-2.0);
89}
90
91} // namespace webrtc