blob: f29b416cc5f920c9977e6d8925d471228ef390c9 [file] [log] [blame]
deadbeef70ab1a12015-09-28 16:53:55 -07001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
deadbeef70ab1a12015-09-28 16:53:55 -07003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * 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.
deadbeef70ab1a12015-09-28 16:53:55 -07009 */
10
kwibergd1fe2812016-04-27 06:47:29 -070011#include <memory>
deadbeef70ab1a12015-09-28 16:53:55 -070012#include <string>
Tommif888bb52015-12-12 01:37:01 +010013#include <utility>
deadbeef70ab1a12015-09-28 16:53:55 -070014
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "media/base/fakemediaengine.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "media/engine/fakewebrtccall.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "pc/audiotrack.h"
18#include "pc/channelmanager.h"
19#include "pc/localaudiosource.h"
20#include "pc/mediastream.h"
21#include "pc/remoteaudiosource.h"
22#include "pc/rtpreceiver.h"
23#include "pc/rtpsender.h"
24#include "pc/streamcollection.h"
Zhi Huangb5261582017-09-29 10:51:43 -070025#include "pc/test/faketransportcontroller.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020026#include "pc/test/fakevideotracksource.h"
27#include "pc/videotrack.h"
28#include "pc/videotracksource.h"
29#include "rtc_base/gunit.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020030#include "test/gmock.h"
31#include "test/gtest.h"
deadbeef70ab1a12015-09-28 16:53:55 -070032
33using ::testing::_;
34using ::testing::Exactly;
deadbeef5dd42fd2016-05-02 16:20:01 -070035using ::testing::InvokeWithoutArgs;
skvladdc1c62c2016-03-16 19:07:43 -070036using ::testing::Return;
deadbeef70ab1a12015-09-28 16:53:55 -070037
deadbeef20cb0c12017-02-01 20:27:00 -080038namespace {
39
deadbeef70ab1a12015-09-28 16:53:55 -070040static const char kStreamLabel1[] = "local_stream_1";
41static const char kVideoTrackId[] = "video_1";
42static const char kAudioTrackId[] = "audio_1";
Peter Boström0c4e06b2015-10-07 12:23:21 +020043static const uint32_t kVideoSsrc = 98;
deadbeeffac06552015-11-25 11:26:01 -080044static const uint32_t kVideoSsrc2 = 100;
Peter Boström0c4e06b2015-10-07 12:23:21 +020045static const uint32_t kAudioSsrc = 99;
deadbeeffac06552015-11-25 11:26:01 -080046static const uint32_t kAudioSsrc2 = 101;
deadbeef20cb0c12017-02-01 20:27:00 -080047static const int kDefaultTimeout = 10000; // 10 seconds.
deadbeef20cb0c12017-02-01 20:27:00 -080048} // namespace
deadbeef70ab1a12015-09-28 16:53:55 -070049
50namespace webrtc {
51
deadbeef20cb0c12017-02-01 20:27:00 -080052class RtpSenderReceiverTest : public testing::Test,
53 public sigslot::has_slots<> {
tkchin3784b4a2016-06-24 19:31:47 -070054 public:
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070055 RtpSenderReceiverTest()
56 : // Create fake media engine/etc. so we can create channels to use to
deadbeefe814a0d2017-02-25 18:15:09 -080057 // test RtpSenders/RtpReceivers.
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070058 media_engine_(new cricket::FakeMediaEngine()),
deadbeef112b2e92017-02-10 20:13:37 -080059 channel_manager_(
60 std::unique_ptr<cricket::MediaEngineInterface>(media_engine_),
61 rtc::Thread::Current(),
62 rtc::Thread::Current()),
skvlad11a9cbf2016-10-07 11:53:05 -070063 fake_call_(Call::Config(&event_log_)),
deadbeefe814a0d2017-02-25 18:15:09 -080064 local_stream_(MediaStream::Create(kStreamLabel1)) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070065 // Create channels to be used by the RtpSenders and RtpReceivers.
66 channel_manager_.Init();
deadbeef7af91dd2016-12-13 11:29:11 -080067 bool srtp_required = true;
zhihuangb2cdd932017-01-19 16:54:25 -080068 cricket::DtlsTransportInternal* rtp_transport =
69 fake_transport_controller_.CreateDtlsTransport(
zhihuangf5b251b2017-01-12 19:37:48 -080070 cricket::CN_AUDIO, cricket::ICE_CANDIDATE_COMPONENT_RTP);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070071 voice_channel_ = channel_manager_.CreateVoiceChannel(
nisseeaabdf62017-05-05 02:23:02 -070072 &fake_call_, cricket::MediaConfig(),
73 rtp_transport, nullptr, rtc::Thread::Current(),
deadbeef1a2183d2017-02-10 23:44:49 -080074 cricket::CN_AUDIO, srtp_required, cricket::AudioOptions());
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070075 video_channel_ = channel_manager_.CreateVideoChannel(
nisseeaabdf62017-05-05 02:23:02 -070076 &fake_call_, cricket::MediaConfig(),
77 rtp_transport, nullptr, rtc::Thread::Current(),
deadbeef1a2183d2017-02-10 23:44:49 -080078 cricket::CN_VIDEO, srtp_required, cricket::VideoOptions());
deadbeef20cb0c12017-02-01 20:27:00 -080079 voice_channel_->Enable(true);
80 video_channel_->Enable(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070081 voice_media_channel_ = media_engine_->GetVoiceChannel(0);
82 video_media_channel_ = media_engine_->GetVideoChannel(0);
83 RTC_CHECK(voice_channel_);
84 RTC_CHECK(video_channel_);
85 RTC_CHECK(voice_media_channel_);
86 RTC_CHECK(video_media_channel_);
87
88 // Create streams for predefined SSRCs. Streams need to exist in order
89 // for the senders and receievers to apply parameters to them.
90 // Normally these would be created by SetLocalDescription and
91 // SetRemoteDescription.
92 voice_media_channel_->AddSendStream(
93 cricket::StreamParams::CreateLegacy(kAudioSsrc));
94 voice_media_channel_->AddRecvStream(
95 cricket::StreamParams::CreateLegacy(kAudioSsrc));
96 voice_media_channel_->AddSendStream(
97 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
98 voice_media_channel_->AddRecvStream(
99 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
100 video_media_channel_->AddSendStream(
101 cricket::StreamParams::CreateLegacy(kVideoSsrc));
102 video_media_channel_->AddRecvStream(
103 cricket::StreamParams::CreateLegacy(kVideoSsrc));
104 video_media_channel_->AddSendStream(
105 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
106 video_media_channel_->AddRecvStream(
107 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
tkchin3784b4a2016-06-24 19:31:47 -0700108 }
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700109
deadbeef20cb0c12017-02-01 20:27:00 -0800110 // Needed to use DTMF sender.
111 void AddDtmfCodec() {
112 cricket::AudioSendParameters params;
113 const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000,
114 0, 1);
115 params.codecs.push_back(kTelephoneEventCodec);
116 voice_media_channel_->SetSendParameters(params);
117 }
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700118
pbos5214a0a2016-12-16 15:39:11 -0800119 void AddVideoTrack() { AddVideoTrack(false); }
120
121 void AddVideoTrack(bool is_screencast) {
perkja3ede6c2016-03-08 01:27:48 +0100122 rtc::scoped_refptr<VideoTrackSourceInterface> source(
pbos5214a0a2016-12-16 15:39:11 -0800123 FakeVideoTrackSource::Create(is_screencast));
perkj773be362017-07-31 23:22:01 -0700124 video_track_ =
125 VideoTrack::Create(kVideoTrackId, source, rtc::Thread::Current());
deadbeefe814a0d2017-02-25 18:15:09 -0800126 EXPECT_TRUE(local_stream_->AddTrack(video_track_));
deadbeef70ab1a12015-09-28 16:53:55 -0700127 }
128
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700129 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
130
131 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
132 audio_track_ = AudioTrack::Create(kAudioTrackId, source);
deadbeefe814a0d2017-02-25 18:15:09 -0800133 EXPECT_TRUE(local_stream_->AddTrack(audio_track_));
deadbeeffac06552015-11-25 11:26:01 -0800134 audio_rtp_sender_ =
deadbeefe814a0d2017-02-25 18:15:09 -0800135 new AudioRtpSender(local_stream_->GetAudioTracks()[0],
Steve Anton8ffb9c32017-08-31 15:45:38 -0700136 {local_stream_->label()}, voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800137 audio_rtp_sender_->SetSsrc(kAudioSsrc);
deadbeef20cb0c12017-02-01 20:27:00 -0800138 audio_rtp_sender_->GetOnDestroyedSignal()->connect(
139 this, &RtpSenderReceiverTest::OnAudioSenderDestroyed);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700140 VerifyVoiceChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700141 }
142
deadbeef20cb0c12017-02-01 20:27:00 -0800143 void OnAudioSenderDestroyed() { audio_sender_destroyed_signal_fired_ = true; }
144
pbos5214a0a2016-12-16 15:39:11 -0800145 void CreateVideoRtpSender() { CreateVideoRtpSender(false); }
146
147 void CreateVideoRtpSender(bool is_screencast) {
148 AddVideoTrack(is_screencast);
deadbeefe814a0d2017-02-25 18:15:09 -0800149 video_rtp_sender_ =
150 new VideoRtpSender(local_stream_->GetVideoTracks()[0],
Steve Anton8ffb9c32017-08-31 15:45:38 -0700151 {local_stream_->label()}, video_channel_);
deadbeeffac06552015-11-25 11:26:01 -0800152 video_rtp_sender_->SetSsrc(kVideoSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700153 VerifyVideoChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700154 }
155
156 void DestroyAudioRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700157 audio_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700158 VerifyVoiceChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700159 }
160
161 void DestroyVideoRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700162 video_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700163 VerifyVideoChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700164 }
165
166 void CreateAudioRtpReceiver() {
deadbeefe814a0d2017-02-25 18:15:09 -0800167 audio_rtp_receiver_ =
168 new AudioRtpReceiver(kAudioTrackId, kAudioSsrc, voice_channel_);
perkjd61bf802016-03-24 03:16:19 -0700169 audio_track_ = audio_rtp_receiver_->audio_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700170 VerifyVoiceChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700171 }
172
173 void CreateVideoRtpReceiver() {
deadbeefe814a0d2017-02-25 18:15:09 -0800174 video_rtp_receiver_ = new VideoRtpReceiver(
175 kVideoTrackId, rtc::Thread::Current(), kVideoSsrc, video_channel_);
perkjf0dcfe22016-03-10 18:32:00 +0100176 video_track_ = video_rtp_receiver_->video_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700177 VerifyVideoChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700178 }
179
180 void DestroyAudioRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700181 audio_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700182 VerifyVoiceChannelNoOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700183 }
184
185 void DestroyVideoRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700186 video_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700187 VerifyVideoChannelNoOutput();
188 }
189
190 void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
191
192 void VerifyVoiceChannelInput(uint32_t ssrc) {
193 // Verify that the media channel has an audio source, and the stream isn't
194 // muted.
195 EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
196 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
197 }
198
199 void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
200
201 void VerifyVideoChannelInput(uint32_t ssrc) {
202 // Verify that the media channel has a video source,
203 EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
204 }
205
206 void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
207
208 void VerifyVoiceChannelNoInput(uint32_t ssrc) {
209 // Verify that the media channel's source is reset.
210 EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
211 }
212
213 void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
214
215 void VerifyVideoChannelNoInput(uint32_t ssrc) {
216 // Verify that the media channel's source is reset.
217 EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
218 }
219
220 void VerifyVoiceChannelOutput() {
221 // Verify that the volume is initialized to 1.
222 double volume;
223 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
224 EXPECT_EQ(1, volume);
225 }
226
227 void VerifyVideoChannelOutput() {
228 // Verify that the media channel has a sink.
229 EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
230 }
231
232 void VerifyVoiceChannelNoOutput() {
233 // Verify that the volume is reset to 0.
234 double volume;
235 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
236 EXPECT_EQ(0, volume);
237 }
238
239 void VerifyVideoChannelNoOutput() {
240 // Verify that the media channel's sink is reset.
241 EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
deadbeef70ab1a12015-09-28 16:53:55 -0700242 }
243
244 protected:
skvlad11a9cbf2016-10-07 11:53:05 -0700245 webrtc::RtcEventLogNullImpl event_log_;
deadbeef112b2e92017-02-10 20:13:37 -0800246 // |media_engine_| is actually owned by |channel_manager_|.
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700247 cricket::FakeMediaEngine* media_engine_;
248 cricket::FakeTransportController fake_transport_controller_;
249 cricket::ChannelManager channel_manager_;
250 cricket::FakeCall fake_call_;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700251 cricket::VoiceChannel* voice_channel_;
252 cricket::VideoChannel* video_channel_;
253 cricket::FakeVoiceMediaChannel* voice_media_channel_;
254 cricket::FakeVideoMediaChannel* video_media_channel_;
deadbeef70ab1a12015-09-28 16:53:55 -0700255 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
256 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
257 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
258 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
deadbeefe814a0d2017-02-25 18:15:09 -0800259 rtc::scoped_refptr<MediaStreamInterface> local_stream_;
deadbeef70ab1a12015-09-28 16:53:55 -0700260 rtc::scoped_refptr<VideoTrackInterface> video_track_;
261 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
deadbeef20cb0c12017-02-01 20:27:00 -0800262 bool audio_sender_destroyed_signal_fired_ = false;
deadbeef70ab1a12015-09-28 16:53:55 -0700263};
264
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700265// Test that |voice_channel_| is updated when an audio track is associated
deadbeef70ab1a12015-09-28 16:53:55 -0700266// and disassociated with an AudioRtpSender.
267TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
268 CreateAudioRtpSender();
269 DestroyAudioRtpSender();
270}
271
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700272// Test that |video_channel_| is updated when a video track is associated and
deadbeef70ab1a12015-09-28 16:53:55 -0700273// disassociated with a VideoRtpSender.
274TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
275 CreateVideoRtpSender();
276 DestroyVideoRtpSender();
277}
278
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700279// Test that |voice_channel_| is updated when a remote audio track is
deadbeef70ab1a12015-09-28 16:53:55 -0700280// associated and disassociated with an AudioRtpReceiver.
281TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
282 CreateAudioRtpReceiver();
283 DestroyAudioRtpReceiver();
284}
285
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700286// Test that |video_channel_| is updated when a remote video track is
287// associated and disassociated with a VideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700288TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
289 CreateVideoRtpReceiver();
290 DestroyVideoRtpReceiver();
291}
292
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700293// Test that the AudioRtpSender applies options from the local audio source.
294TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
295 cricket::AudioOptions options;
296 options.echo_cancellation = rtc::Optional<bool>(true);
deadbeef757146b2017-02-10 21:26:48 -0800297 auto source = LocalAudioSource::Create(&options);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700298 CreateAudioRtpSender(source.get());
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700299
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700300 EXPECT_EQ(rtc::Optional<bool>(true),
301 voice_media_channel_->options().echo_cancellation);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700302
303 DestroyAudioRtpSender();
304}
305
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700306// Test that the stream is muted when the track is disabled, and unmuted when
307// the track is enabled.
308TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
309 CreateAudioRtpSender();
310
311 audio_track_->set_enabled(false);
312 EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
313
314 audio_track_->set_enabled(true);
315 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
316
317 DestroyAudioRtpSender();
318}
319
320// Test that the volume is set to 0 when the track is disabled, and back to
321// 1 when the track is enabled.
deadbeef70ab1a12015-09-28 16:53:55 -0700322TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
323 CreateAudioRtpReceiver();
324
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700325 double volume;
326 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
327 EXPECT_EQ(1, volume);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700328
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700329 audio_track_->set_enabled(false);
330 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
331 EXPECT_EQ(0, volume);
332
deadbeef70ab1a12015-09-28 16:53:55 -0700333 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700334 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
335 EXPECT_EQ(1, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700336
337 DestroyAudioRtpReceiver();
338}
339
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700340// Currently no action is taken when a remote video track is disabled or
341// enabled, so there's nothing to test here, other than what is normally
342// verified in DestroyVideoRtpSender.
deadbeef70ab1a12015-09-28 16:53:55 -0700343TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
344 CreateVideoRtpSender();
345
deadbeef70ab1a12015-09-28 16:53:55 -0700346 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700347 video_track_->set_enabled(true);
348
349 DestroyVideoRtpSender();
350}
351
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700352// Test that the state of the video track created by the VideoRtpReceiver is
353// updated when the receiver is destroyed.
perkjf0dcfe22016-03-10 18:32:00 +0100354TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
355 CreateVideoRtpReceiver();
356
357 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
358 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
359 video_track_->GetSource()->state());
360
361 DestroyVideoRtpReceiver();
362
363 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
364 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
365 video_track_->GetSource()->state());
366}
367
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700368// Currently no action is taken when a remote video track is disabled or
369// enabled, so there's nothing to test here, other than what is normally
370// verified in DestroyVideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700371TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
372 CreateVideoRtpReceiver();
373
374 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700375 video_track_->set_enabled(true);
376
377 DestroyVideoRtpReceiver();
378}
379
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700380// Test that the AudioRtpReceiver applies volume changes from the track source
381// to the media channel.
deadbeef70ab1a12015-09-28 16:53:55 -0700382TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
383 CreateAudioRtpReceiver();
384
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700385 double volume;
386 audio_track_->GetSource()->SetVolume(0.5);
387 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
388 EXPECT_EQ(0.5, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700389
390 // Disable the audio track, this should prevent setting the volume.
deadbeef70ab1a12015-09-28 16:53:55 -0700391 audio_track_->set_enabled(false);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700392 audio_track_->GetSource()->SetVolume(0.8);
393 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
394 EXPECT_EQ(0, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700395
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700396 // When the track is enabled, the previously set volume should take effect.
deadbeef70ab1a12015-09-28 16:53:55 -0700397 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700398 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
399 EXPECT_EQ(0.8, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700400
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700401 // Try changing volume one more time.
402 audio_track_->GetSource()->SetVolume(0.9);
403 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
404 EXPECT_EQ(0.9, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700405
406 DestroyAudioRtpReceiver();
407}
408
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700409// Test that the media channel isn't enabled for sending if the audio sender
410// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800411TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700412 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800413 rtc::scoped_refptr<AudioTrackInterface> track =
414 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700415
416 // Track but no SSRC.
417 EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
418 VerifyVoiceChannelNoInput();
419
420 // SSRC but no track.
421 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
422 audio_rtp_sender_->SetSsrc(kAudioSsrc);
423 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800424}
425
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700426// Test that the media channel isn't enabled for sending if the video sender
427// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800428TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700429 video_rtp_sender_ = new VideoRtpSender(video_channel_);
430
431 // Track but no SSRC.
432 EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
433 VerifyVideoChannelNoInput();
434
435 // SSRC but no track.
436 EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
437 video_rtp_sender_->SetSsrc(kVideoSsrc);
438 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800439}
440
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700441// Test that the media channel is enabled for sending when the audio sender
442// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800443TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700444 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800445 rtc::scoped_refptr<AudioTrackInterface> track =
446 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700447 audio_rtp_sender_->SetSsrc(kAudioSsrc);
448 audio_rtp_sender_->SetTrack(track);
449 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800450
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700451 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800452}
453
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700454// Test that the media channel is enabled for sending when the audio sender
455// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800456TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700457 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800458 rtc::scoped_refptr<AudioTrackInterface> track =
459 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700460 audio_rtp_sender_->SetTrack(track);
461 audio_rtp_sender_->SetSsrc(kAudioSsrc);
462 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800463
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700464 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800465}
466
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700467// Test that the media channel is enabled for sending when the video sender
468// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800469TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
nisseaf510af2016-03-21 08:20:42 -0700470 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700471 video_rtp_sender_ = new VideoRtpSender(video_channel_);
472 video_rtp_sender_->SetSsrc(kVideoSsrc);
473 video_rtp_sender_->SetTrack(video_track_);
474 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800475
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700476 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800477}
478
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700479// Test that the media channel is enabled for sending when the video sender
480// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800481TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
nisseaf510af2016-03-21 08:20:42 -0700482 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700483 video_rtp_sender_ = new VideoRtpSender(video_channel_);
484 video_rtp_sender_->SetTrack(video_track_);
485 video_rtp_sender_->SetSsrc(kVideoSsrc);
486 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800487
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700488 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800489}
490
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700491// Test that the media channel stops sending when the audio sender's SSRC is set
492// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800493TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700494 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800495
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700496 audio_rtp_sender_->SetSsrc(0);
497 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800498}
499
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700500// Test that the media channel stops sending when the video sender's SSRC is set
501// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800502TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700503 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800504
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700505 audio_rtp_sender_->SetSsrc(0);
506 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800507}
508
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700509// Test that the media channel stops sending when the audio sender's track is
510// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800511TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700512 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800513
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700514 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
515 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800516}
517
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700518// Test that the media channel stops sending when the video sender's track is
519// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800520TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700521 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800522
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700523 video_rtp_sender_->SetSsrc(0);
524 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800525}
526
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700527// Test that when the audio sender's SSRC is changed, the media channel stops
528// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800529TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700530 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800531
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700532 audio_rtp_sender_->SetSsrc(kAudioSsrc2);
533 VerifyVoiceChannelNoInput(kAudioSsrc);
534 VerifyVoiceChannelInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800535
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700536 audio_rtp_sender_ = nullptr;
537 VerifyVoiceChannelNoInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800538}
539
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700540// Test that when the audio sender's SSRC is changed, the media channel stops
541// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800542TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700543 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800544
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700545 video_rtp_sender_->SetSsrc(kVideoSsrc2);
546 VerifyVideoChannelNoInput(kVideoSsrc);
547 VerifyVideoChannelInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800548
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700549 video_rtp_sender_ = nullptr;
550 VerifyVideoChannelNoInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800551}
552
skvladdc1c62c2016-03-16 19:07:43 -0700553TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
554 CreateAudioRtpSender();
555
skvladdc1c62c2016-03-16 19:07:43 -0700556 RtpParameters params = audio_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700557 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700558 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
559
560 DestroyAudioRtpSender();
561}
562
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700563TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
564 CreateAudioRtpSender();
565
566 EXPECT_EQ(-1, voice_media_channel_->max_bps());
567 webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
568 EXPECT_EQ(1, params.encodings.size());
deadbeefe702b302017-02-04 12:09:01 -0800569 EXPECT_FALSE(params.encodings[0].max_bitrate_bps);
570 params.encodings[0].max_bitrate_bps = rtc::Optional<int>(1000);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700571 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
572
573 // Read back the parameters and verify they have been changed.
574 params = audio_rtp_sender_->GetParameters();
575 EXPECT_EQ(1, params.encodings.size());
deadbeefe702b302017-02-04 12:09:01 -0800576 EXPECT_EQ(rtc::Optional<int>(1000), params.encodings[0].max_bitrate_bps);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700577
578 // Verify that the audio channel received the new parameters.
579 params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
580 EXPECT_EQ(1, params.encodings.size());
deadbeefe702b302017-02-04 12:09:01 -0800581 EXPECT_EQ(rtc::Optional<int>(1000), params.encodings[0].max_bitrate_bps);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700582
583 // Verify that the global bitrate limit has not been changed.
584 EXPECT_EQ(-1, voice_media_channel_->max_bps());
585
586 DestroyAudioRtpSender();
587}
588
skvladdc1c62c2016-03-16 19:07:43 -0700589TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
590 CreateVideoRtpSender();
591
skvladdc1c62c2016-03-16 19:07:43 -0700592 RtpParameters params = video_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700593 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700594 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
595
596 DestroyVideoRtpSender();
597}
598
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700599TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
600 CreateVideoRtpSender();
601
602 EXPECT_EQ(-1, video_media_channel_->max_bps());
603 webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
604 EXPECT_EQ(1, params.encodings.size());
deadbeefe702b302017-02-04 12:09:01 -0800605 EXPECT_FALSE(params.encodings[0].max_bitrate_bps);
606 params.encodings[0].max_bitrate_bps = rtc::Optional<int>(1000);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700607 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
608
609 // Read back the parameters and verify they have been changed.
610 params = video_rtp_sender_->GetParameters();
611 EXPECT_EQ(1, params.encodings.size());
deadbeefe702b302017-02-04 12:09:01 -0800612 EXPECT_EQ(rtc::Optional<int>(1000), params.encodings[0].max_bitrate_bps);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700613
614 // Verify that the video channel received the new parameters.
615 params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
616 EXPECT_EQ(1, params.encodings.size());
deadbeefe702b302017-02-04 12:09:01 -0800617 EXPECT_EQ(rtc::Optional<int>(1000), params.encodings[0].max_bitrate_bps);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700618
619 // Verify that the global bitrate limit has not been changed.
620 EXPECT_EQ(-1, video_media_channel_->max_bps());
621
622 DestroyVideoRtpSender();
623}
624
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700625TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
626 CreateAudioRtpReceiver();
627
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700628 RtpParameters params = audio_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700629 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700630 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
631
632 DestroyAudioRtpReceiver();
633}
634
635TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
636 CreateVideoRtpReceiver();
637
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700638 RtpParameters params = video_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700639 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700640 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
641
642 DestroyVideoRtpReceiver();
643}
644
pbos5214a0a2016-12-16 15:39:11 -0800645// Test that makes sure that a video track content hint translates to the proper
646// value for sources that are not screencast.
647TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHint) {
648 CreateVideoRtpSender();
649
650 video_track_->set_enabled(true);
651
652 // |video_track_| is not screencast by default.
653 EXPECT_EQ(rtc::Optional<bool>(false),
654 video_media_channel_->options().is_screencast);
655 // No content hint should be set by default.
656 EXPECT_EQ(VideoTrackInterface::ContentHint::kNone,
657 video_track_->content_hint());
658 // Setting detailed should turn a non-screencast source into screencast mode.
659 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
660 EXPECT_EQ(rtc::Optional<bool>(true),
661 video_media_channel_->options().is_screencast);
662 // Removing the content hint should turn the track back into non-screencast
663 // mode.
664 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
665 EXPECT_EQ(rtc::Optional<bool>(false),
666 video_media_channel_->options().is_screencast);
667 // Setting fluid should remain in non-screencast mode (its default).
668 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid);
669 EXPECT_EQ(rtc::Optional<bool>(false),
670 video_media_channel_->options().is_screencast);
671
672 DestroyVideoRtpSender();
673}
674
675// Test that makes sure that a video track content hint translates to the proper
676// value for screencast sources.
677TEST_F(RtpSenderReceiverTest,
678 PropagatesVideoTrackContentHintForScreencastSource) {
679 CreateVideoRtpSender(true);
680
681 video_track_->set_enabled(true);
682
683 // |video_track_| with a screencast source should be screencast by default.
684 EXPECT_EQ(rtc::Optional<bool>(true),
685 video_media_channel_->options().is_screencast);
686 // No content hint should be set by default.
687 EXPECT_EQ(VideoTrackInterface::ContentHint::kNone,
688 video_track_->content_hint());
689 // Setting fluid should turn a screencast source into non-screencast mode.
690 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kFluid);
691 EXPECT_EQ(rtc::Optional<bool>(false),
692 video_media_channel_->options().is_screencast);
693 // Removing the content hint should turn the track back into screencast mode.
694 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
695 EXPECT_EQ(rtc::Optional<bool>(true),
696 video_media_channel_->options().is_screencast);
697 // Setting detailed should still remain in screencast mode (its default).
698 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
699 EXPECT_EQ(rtc::Optional<bool>(true),
700 video_media_channel_->options().is_screencast);
701
702 DestroyVideoRtpSender();
703}
704
705// Test that makes sure any content hints that are set on a track before
706// VideoRtpSender is ready to send are still applied when it gets ready to send.
707TEST_F(RtpSenderReceiverTest,
708 PropagatesVideoTrackContentHintSetBeforeEnabling) {
709 AddVideoTrack();
710 // Setting detailed overrides the default non-screencast mode. This should be
711 // applied even if the track is set on construction.
712 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
deadbeefe814a0d2017-02-25 18:15:09 -0800713 video_rtp_sender_ =
714 new VideoRtpSender(local_stream_->GetVideoTracks()[0],
Steve Anton8ffb9c32017-08-31 15:45:38 -0700715 {local_stream_->label()}, video_channel_);
pbos5214a0a2016-12-16 15:39:11 -0800716 video_track_->set_enabled(true);
717
718 // Sender is not ready to send (no SSRC) so no option should have been set.
719 EXPECT_EQ(rtc::Optional<bool>(),
720 video_media_channel_->options().is_screencast);
721
722 // Verify that the content hint is accounted for when video_rtp_sender_ does
723 // get enabled.
724 video_rtp_sender_->SetSsrc(kVideoSsrc);
725 EXPECT_EQ(rtc::Optional<bool>(true),
726 video_media_channel_->options().is_screencast);
727
728 // And removing the hint should go back to false (to verify that false was
729 // default correctly).
730 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone);
731 EXPECT_EQ(rtc::Optional<bool>(false),
732 video_media_channel_->options().is_screencast);
733
734 DestroyVideoRtpSender();
735}
736
deadbeef20cb0c12017-02-01 20:27:00 -0800737TEST_F(RtpSenderReceiverTest, AudioSenderHasDtmfSender) {
738 CreateAudioRtpSender();
739 EXPECT_NE(nullptr, audio_rtp_sender_->GetDtmfSender());
740}
741
742TEST_F(RtpSenderReceiverTest, VideoSenderDoesNotHaveDtmfSender) {
743 CreateVideoRtpSender();
744 EXPECT_EQ(nullptr, video_rtp_sender_->GetDtmfSender());
745}
746
747// Test that the DTMF sender is really using |voice_channel_|, and thus returns
748// true/false from CanSendDtmf based on what |voice_channel_| returns.
749TEST_F(RtpSenderReceiverTest, CanInsertDtmf) {
750 AddDtmfCodec();
751 CreateAudioRtpSender();
752 auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
753 ASSERT_NE(nullptr, dtmf_sender);
754 EXPECT_TRUE(dtmf_sender->CanInsertDtmf());
755}
756
757TEST_F(RtpSenderReceiverTest, CanNotInsertDtmf) {
758 CreateAudioRtpSender();
759 auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
760 ASSERT_NE(nullptr, dtmf_sender);
761 // DTMF codec has not been added, as it was in the above test.
762 EXPECT_FALSE(dtmf_sender->CanInsertDtmf());
763}
764
765TEST_F(RtpSenderReceiverTest, InsertDtmf) {
766 AddDtmfCodec();
767 CreateAudioRtpSender();
768 auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
769 ASSERT_NE(nullptr, dtmf_sender);
770
771 EXPECT_EQ(0U, voice_media_channel_->dtmf_info_queue().size());
772
773 // Insert DTMF
774 const int expected_duration = 90;
775 dtmf_sender->InsertDtmf("012", expected_duration, 100);
776
777 // Verify
778 ASSERT_EQ_WAIT(3U, voice_media_channel_->dtmf_info_queue().size(),
779 kDefaultTimeout);
780 const uint32_t send_ssrc =
781 voice_media_channel_->send_streams()[0].first_ssrc();
782 EXPECT_TRUE(CompareDtmfInfo(voice_media_channel_->dtmf_info_queue()[0],
783 send_ssrc, 0, expected_duration));
784 EXPECT_TRUE(CompareDtmfInfo(voice_media_channel_->dtmf_info_queue()[1],
785 send_ssrc, 1, expected_duration));
786 EXPECT_TRUE(CompareDtmfInfo(voice_media_channel_->dtmf_info_queue()[2],
787 send_ssrc, 2, expected_duration));
788}
789
790// Make sure the signal from "GetOnDestroyedSignal()" fires when the sender is
791// destroyed, which is needed for the DTMF sender.
792TEST_F(RtpSenderReceiverTest, TestOnDestroyedSignal) {
793 CreateAudioRtpSender();
794 EXPECT_FALSE(audio_sender_destroyed_signal_fired_);
795 audio_rtp_sender_ = nullptr;
796 EXPECT_TRUE(audio_sender_destroyed_signal_fired_);
797}
798
deadbeef70ab1a12015-09-28 16:53:55 -0700799} // namespace webrtc