blob: f4f550e9068dd872f608a0e442df37584a5cd6aa [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
Henrik Kjellander15583c12016-02-10 10:53:12 +010015#include "webrtc/api/audiotrack.h"
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070016#include "webrtc/api/fakemediacontroller.h"
17#include "webrtc/api/localaudiosource.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010018#include "webrtc/api/mediastream.h"
19#include "webrtc/api/remoteaudiosource.h"
20#include "webrtc/api/rtpreceiver.h"
21#include "webrtc/api/rtpsender.h"
22#include "webrtc/api/streamcollection.h"
nisseaf510af2016-03-21 08:20:42 -070023#include "webrtc/api/test/fakevideotracksource.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010024#include "webrtc/api/videotrack.h"
kwibergac9f8762016-09-30 22:29:43 -070025#include "webrtc/api/videotracksource.h"
deadbeef70ab1a12015-09-28 16:53:55 -070026#include "webrtc/base/gunit.h"
skvlad11a9cbf2016-10-07 11:53:05 -070027#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070028#include "webrtc/media/base/fakemediaengine.h"
kwibergac9f8762016-09-30 22:29:43 -070029#include "webrtc/media/base/mediachannel.h"
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070030#include "webrtc/media/engine/fakewebrtccall.h"
31#include "webrtc/p2p/base/faketransportcontroller.h"
32#include "webrtc/pc/channelmanager.h"
kwibergac9f8762016-09-30 22:29:43 -070033#include "webrtc/test/gmock.h"
34#include "webrtc/test/gtest.h"
deadbeef70ab1a12015-09-28 16:53:55 -070035
36using ::testing::_;
37using ::testing::Exactly;
deadbeef5dd42fd2016-05-02 16:20:01 -070038using ::testing::InvokeWithoutArgs;
skvladdc1c62c2016-03-16 19:07:43 -070039using ::testing::Return;
deadbeef70ab1a12015-09-28 16:53:55 -070040
41static const char kStreamLabel1[] = "local_stream_1";
42static const char kVideoTrackId[] = "video_1";
43static const char kAudioTrackId[] = "audio_1";
Peter Boström0c4e06b2015-10-07 12:23:21 +020044static const uint32_t kVideoSsrc = 98;
deadbeeffac06552015-11-25 11:26:01 -080045static const uint32_t kVideoSsrc2 = 100;
Peter Boström0c4e06b2015-10-07 12:23:21 +020046static const uint32_t kAudioSsrc = 99;
deadbeeffac06552015-11-25 11:26:01 -080047static const uint32_t kAudioSsrc2 = 101;
deadbeef70ab1a12015-09-28 16:53:55 -070048
49namespace webrtc {
50
tkchin3784b4a2016-06-24 19:31:47 -070051class RtpSenderReceiverTest : public testing::Test {
52 public:
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070053 RtpSenderReceiverTest()
54 : // Create fake media engine/etc. so we can create channels to use to
55 // test RtpSenders/RtpReceivers.
56 media_engine_(new cricket::FakeMediaEngine()),
57 channel_manager_(media_engine_,
58 rtc::Thread::Current(),
59 rtc::Thread::Current()),
skvlad11a9cbf2016-10-07 11:53:05 -070060 fake_call_(Call::Config(&event_log_)),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070061 fake_media_controller_(&channel_manager_, &fake_call_),
62 stream_(MediaStream::Create(kStreamLabel1)) {
63 // Create channels to be used by the RtpSenders and RtpReceivers.
64 channel_manager_.Init();
deadbeef7af91dd2016-12-13 11:29:11 -080065 bool rtcp_enabled = false;
66 bool srtp_required = true;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070067 voice_channel_ = channel_manager_.CreateVoiceChannel(
68 &fake_media_controller_, &fake_transport_controller_, cricket::CN_AUDIO,
deadbeef7af91dd2016-12-13 11:29:11 -080069 nullptr, rtcp_enabled, srtp_required, cricket::AudioOptions());
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070070 video_channel_ = channel_manager_.CreateVideoChannel(
71 &fake_media_controller_, &fake_transport_controller_, cricket::CN_VIDEO,
deadbeef7af91dd2016-12-13 11:29:11 -080072 nullptr, rtcp_enabled, srtp_required, cricket::VideoOptions());
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070073 voice_media_channel_ = media_engine_->GetVoiceChannel(0);
74 video_media_channel_ = media_engine_->GetVideoChannel(0);
75 RTC_CHECK(voice_channel_);
76 RTC_CHECK(video_channel_);
77 RTC_CHECK(voice_media_channel_);
78 RTC_CHECK(video_media_channel_);
79
80 // Create streams for predefined SSRCs. Streams need to exist in order
81 // for the senders and receievers to apply parameters to them.
82 // Normally these would be created by SetLocalDescription and
83 // SetRemoteDescription.
84 voice_media_channel_->AddSendStream(
85 cricket::StreamParams::CreateLegacy(kAudioSsrc));
86 voice_media_channel_->AddRecvStream(
87 cricket::StreamParams::CreateLegacy(kAudioSsrc));
88 voice_media_channel_->AddSendStream(
89 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
90 voice_media_channel_->AddRecvStream(
91 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
92 video_media_channel_->AddSendStream(
93 cricket::StreamParams::CreateLegacy(kVideoSsrc));
94 video_media_channel_->AddRecvStream(
95 cricket::StreamParams::CreateLegacy(kVideoSsrc));
96 video_media_channel_->AddSendStream(
97 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
98 video_media_channel_->AddRecvStream(
99 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
tkchin3784b4a2016-06-24 19:31:47 -0700100 }
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700101
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700102 void TearDown() override { channel_manager_.Terminate(); }
103
nisseaf510af2016-03-21 08:20:42 -0700104 void AddVideoTrack() {
perkja3ede6c2016-03-08 01:27:48 +0100105 rtc::scoped_refptr<VideoTrackSourceInterface> source(
nisseaf510af2016-03-21 08:20:42 -0700106 FakeVideoTrackSource::Create());
deadbeef70ab1a12015-09-28 16:53:55 -0700107 video_track_ = VideoTrack::Create(kVideoTrackId, source);
108 EXPECT_TRUE(stream_->AddTrack(video_track_));
109 }
110
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700111 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
112
113 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
114 audio_track_ = AudioTrack::Create(kAudioTrackId, source);
deadbeef70ab1a12015-09-28 16:53:55 -0700115 EXPECT_TRUE(stream_->AddTrack(audio_track_));
deadbeeffac06552015-11-25 11:26:01 -0800116 audio_rtp_sender_ =
117 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700118 voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800119 audio_rtp_sender_->SetSsrc(kAudioSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700120 VerifyVoiceChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700121 }
122
123 void CreateVideoRtpSender() {
nisseaf510af2016-03-21 08:20:42 -0700124 AddVideoTrack();
deadbeef70ab1a12015-09-28 16:53:55 -0700125 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700126 stream_->label(), video_channel_);
deadbeeffac06552015-11-25 11:26:01 -0800127 video_rtp_sender_->SetSsrc(kVideoSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700128 VerifyVideoChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700129 }
130
131 void DestroyAudioRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700132 audio_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700133 VerifyVoiceChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700134 }
135
136 void DestroyVideoRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700137 video_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700138 VerifyVideoChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700139 }
140
141 void CreateAudioRtpReceiver() {
tommi6eca7e32015-12-15 04:27:11 -0800142 audio_track_ = AudioTrack::Create(
Tommif888bb52015-12-12 01:37:01 +0100143 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
deadbeef70ab1a12015-09-28 16:53:55 -0700144 EXPECT_TRUE(stream_->AddTrack(audio_track_));
perkjd61bf802016-03-24 03:16:19 -0700145 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700146 kAudioSsrc, voice_channel_);
perkjd61bf802016-03-24 03:16:19 -0700147 audio_track_ = audio_rtp_receiver_->audio_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700148 VerifyVoiceChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700149 }
150
151 void CreateVideoRtpReceiver() {
perkjf0dcfe22016-03-10 18:32:00 +0100152 video_rtp_receiver_ =
153 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700154 kVideoSsrc, video_channel_);
perkjf0dcfe22016-03-10 18:32:00 +0100155 video_track_ = video_rtp_receiver_->video_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700156 VerifyVideoChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700157 }
158
159 void DestroyAudioRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700160 audio_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700161 VerifyVoiceChannelNoOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700162 }
163
164 void DestroyVideoRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700165 video_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700166 VerifyVideoChannelNoOutput();
167 }
168
169 void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
170
171 void VerifyVoiceChannelInput(uint32_t ssrc) {
172 // Verify that the media channel has an audio source, and the stream isn't
173 // muted.
174 EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
175 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
176 }
177
178 void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
179
180 void VerifyVideoChannelInput(uint32_t ssrc) {
181 // Verify that the media channel has a video source,
182 EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
183 }
184
185 void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
186
187 void VerifyVoiceChannelNoInput(uint32_t ssrc) {
188 // Verify that the media channel's source is reset.
189 EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
190 }
191
192 void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
193
194 void VerifyVideoChannelNoInput(uint32_t ssrc) {
195 // Verify that the media channel's source is reset.
196 EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
197 }
198
199 void VerifyVoiceChannelOutput() {
200 // Verify that the volume is initialized to 1.
201 double volume;
202 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
203 EXPECT_EQ(1, volume);
204 }
205
206 void VerifyVideoChannelOutput() {
207 // Verify that the media channel has a sink.
208 EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
209 }
210
211 void VerifyVoiceChannelNoOutput() {
212 // Verify that the volume is reset to 0.
213 double volume;
214 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
215 EXPECT_EQ(0, volume);
216 }
217
218 void VerifyVideoChannelNoOutput() {
219 // Verify that the media channel's sink is reset.
220 EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
deadbeef70ab1a12015-09-28 16:53:55 -0700221 }
222
223 protected:
skvlad11a9cbf2016-10-07 11:53:05 -0700224 webrtc::RtcEventLogNullImpl event_log_;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700225 cricket::FakeMediaEngine* media_engine_;
226 cricket::FakeTransportController fake_transport_controller_;
227 cricket::ChannelManager channel_manager_;
228 cricket::FakeCall fake_call_;
229 cricket::FakeMediaController fake_media_controller_;
230 cricket::VoiceChannel* voice_channel_;
231 cricket::VideoChannel* video_channel_;
232 cricket::FakeVoiceMediaChannel* voice_media_channel_;
233 cricket::FakeVideoMediaChannel* video_media_channel_;
deadbeef70ab1a12015-09-28 16:53:55 -0700234 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
235 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
236 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
237 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
238 rtc::scoped_refptr<MediaStreamInterface> stream_;
239 rtc::scoped_refptr<VideoTrackInterface> video_track_;
240 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
241};
242
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700243// Test that |voice_channel_| is updated when an audio track is associated
deadbeef70ab1a12015-09-28 16:53:55 -0700244// and disassociated with an AudioRtpSender.
245TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
246 CreateAudioRtpSender();
247 DestroyAudioRtpSender();
248}
249
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700250// Test that |video_channel_| is updated when a video track is associated and
deadbeef70ab1a12015-09-28 16:53:55 -0700251// disassociated with a VideoRtpSender.
252TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
253 CreateVideoRtpSender();
254 DestroyVideoRtpSender();
255}
256
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700257// Test that |voice_channel_| is updated when a remote audio track is
deadbeef70ab1a12015-09-28 16:53:55 -0700258// associated and disassociated with an AudioRtpReceiver.
259TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
260 CreateAudioRtpReceiver();
261 DestroyAudioRtpReceiver();
262}
263
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700264// Test that |video_channel_| is updated when a remote video track is
265// associated and disassociated with a VideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700266TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
267 CreateVideoRtpReceiver();
268 DestroyVideoRtpReceiver();
269}
270
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700271// Test that the AudioRtpSender applies options from the local audio source.
272TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
273 cricket::AudioOptions options;
274 options.echo_cancellation = rtc::Optional<bool>(true);
275 auto source = LocalAudioSource::Create(
276 PeerConnectionFactoryInterface::Options(), &options);
277 CreateAudioRtpSender(source.get());
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700278
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700279 EXPECT_EQ(rtc::Optional<bool>(true),
280 voice_media_channel_->options().echo_cancellation);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700281
282 DestroyAudioRtpSender();
283}
284
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700285// Test that the stream is muted when the track is disabled, and unmuted when
286// the track is enabled.
287TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
288 CreateAudioRtpSender();
289
290 audio_track_->set_enabled(false);
291 EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
292
293 audio_track_->set_enabled(true);
294 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
295
296 DestroyAudioRtpSender();
297}
298
299// Test that the volume is set to 0 when the track is disabled, and back to
300// 1 when the track is enabled.
deadbeef70ab1a12015-09-28 16:53:55 -0700301TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
302 CreateAudioRtpReceiver();
303
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700304 double volume;
305 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
306 EXPECT_EQ(1, volume);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700307
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700308 audio_track_->set_enabled(false);
309 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
310 EXPECT_EQ(0, volume);
311
deadbeef70ab1a12015-09-28 16:53:55 -0700312 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700313 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
314 EXPECT_EQ(1, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700315
316 DestroyAudioRtpReceiver();
317}
318
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700319// Currently no action is taken when a remote video track is disabled or
320// enabled, so there's nothing to test here, other than what is normally
321// verified in DestroyVideoRtpSender.
deadbeef70ab1a12015-09-28 16:53:55 -0700322TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
323 CreateVideoRtpSender();
324
deadbeef70ab1a12015-09-28 16:53:55 -0700325 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700326 video_track_->set_enabled(true);
327
328 DestroyVideoRtpSender();
329}
330
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700331// Test that the state of the video track created by the VideoRtpReceiver is
332// updated when the receiver is destroyed.
perkjf0dcfe22016-03-10 18:32:00 +0100333TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
334 CreateVideoRtpReceiver();
335
336 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
337 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
338 video_track_->GetSource()->state());
339
340 DestroyVideoRtpReceiver();
341
342 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
343 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
344 video_track_->GetSource()->state());
345}
346
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700347// Currently no action is taken when a remote video track is disabled or
348// enabled, so there's nothing to test here, other than what is normally
349// verified in DestroyVideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700350TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
351 CreateVideoRtpReceiver();
352
353 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700354 video_track_->set_enabled(true);
355
356 DestroyVideoRtpReceiver();
357}
358
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700359// Test that the AudioRtpReceiver applies volume changes from the track source
360// to the media channel.
deadbeef70ab1a12015-09-28 16:53:55 -0700361TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
362 CreateAudioRtpReceiver();
363
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700364 double volume;
365 audio_track_->GetSource()->SetVolume(0.5);
366 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
367 EXPECT_EQ(0.5, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700368
369 // Disable the audio track, this should prevent setting the volume.
deadbeef70ab1a12015-09-28 16:53:55 -0700370 audio_track_->set_enabled(false);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700371 audio_track_->GetSource()->SetVolume(0.8);
372 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
373 EXPECT_EQ(0, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700374
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700375 // When the track is enabled, the previously set volume should take effect.
deadbeef70ab1a12015-09-28 16:53:55 -0700376 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700377 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
378 EXPECT_EQ(0.8, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700379
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700380 // Try changing volume one more time.
381 audio_track_->GetSource()->SetVolume(0.9);
382 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
383 EXPECT_EQ(0.9, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700384
385 DestroyAudioRtpReceiver();
386}
387
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700388// Test that the media channel isn't enabled for sending if the audio sender
389// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800390TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700391 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800392 rtc::scoped_refptr<AudioTrackInterface> track =
393 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700394
395 // Track but no SSRC.
396 EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
397 VerifyVoiceChannelNoInput();
398
399 // SSRC but no track.
400 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
401 audio_rtp_sender_->SetSsrc(kAudioSsrc);
402 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800403}
404
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700405// Test that the media channel isn't enabled for sending if the video sender
406// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800407TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700408 video_rtp_sender_ = new VideoRtpSender(video_channel_);
409
410 // Track but no SSRC.
411 EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
412 VerifyVideoChannelNoInput();
413
414 // SSRC but no track.
415 EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
416 video_rtp_sender_->SetSsrc(kVideoSsrc);
417 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800418}
419
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700420// Test that the media channel is enabled for sending when the audio sender
421// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800422TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700423 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800424 rtc::scoped_refptr<AudioTrackInterface> track =
425 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700426 audio_rtp_sender_->SetSsrc(kAudioSsrc);
427 audio_rtp_sender_->SetTrack(track);
428 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800429
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700430 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800431}
432
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700433// Test that the media channel is enabled for sending when the audio sender
434// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800435TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700436 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800437 rtc::scoped_refptr<AudioTrackInterface> track =
438 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700439 audio_rtp_sender_->SetTrack(track);
440 audio_rtp_sender_->SetSsrc(kAudioSsrc);
441 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800442
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700443 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800444}
445
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700446// Test that the media channel is enabled for sending when the video sender
447// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800448TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
nisseaf510af2016-03-21 08:20:42 -0700449 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700450 video_rtp_sender_ = new VideoRtpSender(video_channel_);
451 video_rtp_sender_->SetSsrc(kVideoSsrc);
452 video_rtp_sender_->SetTrack(video_track_);
453 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800454
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700455 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800456}
457
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700458// Test that the media channel is enabled for sending when the video sender
459// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800460TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
nisseaf510af2016-03-21 08:20:42 -0700461 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700462 video_rtp_sender_ = new VideoRtpSender(video_channel_);
463 video_rtp_sender_->SetTrack(video_track_);
464 video_rtp_sender_->SetSsrc(kVideoSsrc);
465 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800466
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700467 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800468}
469
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700470// Test that the media channel stops sending when the audio sender's SSRC is set
471// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800472TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700473 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800474
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700475 audio_rtp_sender_->SetSsrc(0);
476 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800477}
478
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700479// Test that the media channel stops sending when the video sender's SSRC is set
480// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800481TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700482 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800483
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700484 audio_rtp_sender_->SetSsrc(0);
485 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800486}
487
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700488// Test that the media channel stops sending when the audio sender's track is
489// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800490TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700491 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800492
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700493 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
494 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800495}
496
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700497// Test that the media channel stops sending when the video sender's track is
498// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800499TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700500 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800501
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700502 video_rtp_sender_->SetSsrc(0);
503 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800504}
505
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700506// Test that when the audio sender's SSRC is changed, the media channel stops
507// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800508TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700509 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800510
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700511 audio_rtp_sender_->SetSsrc(kAudioSsrc2);
512 VerifyVoiceChannelNoInput(kAudioSsrc);
513 VerifyVoiceChannelInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800514
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700515 audio_rtp_sender_ = nullptr;
516 VerifyVoiceChannelNoInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800517}
518
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700519// Test that when the audio sender's SSRC is changed, the media channel stops
520// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800521TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700522 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800523
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700524 video_rtp_sender_->SetSsrc(kVideoSsrc2);
525 VerifyVideoChannelNoInput(kVideoSsrc);
526 VerifyVideoChannelInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800527
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700528 video_rtp_sender_ = nullptr;
529 VerifyVideoChannelNoInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800530}
531
skvladdc1c62c2016-03-16 19:07:43 -0700532TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
533 CreateAudioRtpSender();
534
skvladdc1c62c2016-03-16 19:07:43 -0700535 RtpParameters params = audio_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700536 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700537 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
538
539 DestroyAudioRtpSender();
540}
541
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700542TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
543 CreateAudioRtpSender();
544
545 EXPECT_EQ(-1, voice_media_channel_->max_bps());
546 webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
547 EXPECT_EQ(1, params.encodings.size());
548 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
549 params.encodings[0].max_bitrate_bps = 1000;
550 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
551
552 // Read back the parameters and verify they have been changed.
553 params = audio_rtp_sender_->GetParameters();
554 EXPECT_EQ(1, params.encodings.size());
555 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
556
557 // Verify that the audio channel received the new parameters.
558 params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
559 EXPECT_EQ(1, params.encodings.size());
560 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
561
562 // Verify that the global bitrate limit has not been changed.
563 EXPECT_EQ(-1, voice_media_channel_->max_bps());
564
565 DestroyAudioRtpSender();
566}
567
skvladdc1c62c2016-03-16 19:07:43 -0700568TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
569 CreateVideoRtpSender();
570
skvladdc1c62c2016-03-16 19:07:43 -0700571 RtpParameters params = video_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700572 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700573 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
574
575 DestroyVideoRtpSender();
576}
577
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700578TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
579 CreateVideoRtpSender();
580
581 EXPECT_EQ(-1, video_media_channel_->max_bps());
582 webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
583 EXPECT_EQ(1, params.encodings.size());
584 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
585 params.encodings[0].max_bitrate_bps = 1000;
586 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
587
588 // Read back the parameters and verify they have been changed.
589 params = video_rtp_sender_->GetParameters();
590 EXPECT_EQ(1, params.encodings.size());
591 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
592
593 // Verify that the video channel received the new parameters.
594 params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
595 EXPECT_EQ(1, params.encodings.size());
596 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
597
598 // Verify that the global bitrate limit has not been changed.
599 EXPECT_EQ(-1, video_media_channel_->max_bps());
600
601 DestroyVideoRtpSender();
602}
603
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700604TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
605 CreateAudioRtpReceiver();
606
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700607 RtpParameters params = audio_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700608 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700609 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
610
611 DestroyAudioRtpReceiver();
612}
613
614TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
615 CreateVideoRtpReceiver();
616
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700617 RtpParameters params = video_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700618 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700619 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
620
621 DestroyVideoRtpReceiver();
622}
623
deadbeef70ab1a12015-09-28 16:53:55 -0700624} // namespace webrtc