blob: 4e98f0c1e16bd159ba5973ba96a9d9d5bcf8d879 [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();
65 voice_channel_ = channel_manager_.CreateVoiceChannel(
66 &fake_media_controller_, &fake_transport_controller_, cricket::CN_AUDIO,
67 nullptr, false, cricket::AudioOptions());
68 video_channel_ = channel_manager_.CreateVideoChannel(
69 &fake_media_controller_, &fake_transport_controller_, cricket::CN_VIDEO,
70 nullptr, false, cricket::VideoOptions());
71 voice_media_channel_ = media_engine_->GetVoiceChannel(0);
72 video_media_channel_ = media_engine_->GetVideoChannel(0);
73 RTC_CHECK(voice_channel_);
74 RTC_CHECK(video_channel_);
75 RTC_CHECK(voice_media_channel_);
76 RTC_CHECK(video_media_channel_);
77
78 // Create streams for predefined SSRCs. Streams need to exist in order
79 // for the senders and receievers to apply parameters to them.
80 // Normally these would be created by SetLocalDescription and
81 // SetRemoteDescription.
82 voice_media_channel_->AddSendStream(
83 cricket::StreamParams::CreateLegacy(kAudioSsrc));
84 voice_media_channel_->AddRecvStream(
85 cricket::StreamParams::CreateLegacy(kAudioSsrc));
86 voice_media_channel_->AddSendStream(
87 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
88 voice_media_channel_->AddRecvStream(
89 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
90 video_media_channel_->AddSendStream(
91 cricket::StreamParams::CreateLegacy(kVideoSsrc));
92 video_media_channel_->AddRecvStream(
93 cricket::StreamParams::CreateLegacy(kVideoSsrc));
94 video_media_channel_->AddSendStream(
95 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
96 video_media_channel_->AddRecvStream(
97 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
tkchin3784b4a2016-06-24 19:31:47 -070098 }
Taylor Brandstetter2d549172016-06-24 14:18:22 -070099
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700100 void TearDown() override { channel_manager_.Terminate(); }
101
nisseaf510af2016-03-21 08:20:42 -0700102 void AddVideoTrack() {
perkja3ede6c2016-03-08 01:27:48 +0100103 rtc::scoped_refptr<VideoTrackSourceInterface> source(
nisseaf510af2016-03-21 08:20:42 -0700104 FakeVideoTrackSource::Create());
deadbeef70ab1a12015-09-28 16:53:55 -0700105 video_track_ = VideoTrack::Create(kVideoTrackId, source);
106 EXPECT_TRUE(stream_->AddTrack(video_track_));
107 }
108
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700109 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
110
111 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
112 audio_track_ = AudioTrack::Create(kAudioTrackId, source);
deadbeef70ab1a12015-09-28 16:53:55 -0700113 EXPECT_TRUE(stream_->AddTrack(audio_track_));
deadbeeffac06552015-11-25 11:26:01 -0800114 audio_rtp_sender_ =
115 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700116 voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800117 audio_rtp_sender_->SetSsrc(kAudioSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700118 VerifyVoiceChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700119 }
120
121 void CreateVideoRtpSender() {
nisseaf510af2016-03-21 08:20:42 -0700122 AddVideoTrack();
deadbeef70ab1a12015-09-28 16:53:55 -0700123 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700124 stream_->label(), video_channel_);
deadbeeffac06552015-11-25 11:26:01 -0800125 video_rtp_sender_->SetSsrc(kVideoSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700126 VerifyVideoChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700127 }
128
129 void DestroyAudioRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700130 audio_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700131 VerifyVoiceChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700132 }
133
134 void DestroyVideoRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700135 video_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700136 VerifyVideoChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700137 }
138
139 void CreateAudioRtpReceiver() {
tommi6eca7e32015-12-15 04:27:11 -0800140 audio_track_ = AudioTrack::Create(
Tommif888bb52015-12-12 01:37:01 +0100141 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
deadbeef70ab1a12015-09-28 16:53:55 -0700142 EXPECT_TRUE(stream_->AddTrack(audio_track_));
perkjd61bf802016-03-24 03:16:19 -0700143 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700144 kAudioSsrc, voice_channel_);
perkjd61bf802016-03-24 03:16:19 -0700145 audio_track_ = audio_rtp_receiver_->audio_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700146 VerifyVoiceChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700147 }
148
149 void CreateVideoRtpReceiver() {
perkjf0dcfe22016-03-10 18:32:00 +0100150 video_rtp_receiver_ =
151 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700152 kVideoSsrc, video_channel_);
perkjf0dcfe22016-03-10 18:32:00 +0100153 video_track_ = video_rtp_receiver_->video_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700154 VerifyVideoChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700155 }
156
157 void DestroyAudioRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700158 audio_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700159 VerifyVoiceChannelNoOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700160 }
161
162 void DestroyVideoRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700163 video_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700164 VerifyVideoChannelNoOutput();
165 }
166
167 void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
168
169 void VerifyVoiceChannelInput(uint32_t ssrc) {
170 // Verify that the media channel has an audio source, and the stream isn't
171 // muted.
172 EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
173 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
174 }
175
176 void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
177
178 void VerifyVideoChannelInput(uint32_t ssrc) {
179 // Verify that the media channel has a video source,
180 EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
181 }
182
183 void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
184
185 void VerifyVoiceChannelNoInput(uint32_t ssrc) {
186 // Verify that the media channel's source is reset.
187 EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
188 }
189
190 void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
191
192 void VerifyVideoChannelNoInput(uint32_t ssrc) {
193 // Verify that the media channel's source is reset.
194 EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
195 }
196
197 void VerifyVoiceChannelOutput() {
198 // Verify that the volume is initialized to 1.
199 double volume;
200 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
201 EXPECT_EQ(1, volume);
202 }
203
204 void VerifyVideoChannelOutput() {
205 // Verify that the media channel has a sink.
206 EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
207 }
208
209 void VerifyVoiceChannelNoOutput() {
210 // Verify that the volume is reset to 0.
211 double volume;
212 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
213 EXPECT_EQ(0, volume);
214 }
215
216 void VerifyVideoChannelNoOutput() {
217 // Verify that the media channel's sink is reset.
218 EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
deadbeef70ab1a12015-09-28 16:53:55 -0700219 }
220
221 protected:
skvlad11a9cbf2016-10-07 11:53:05 -0700222 webrtc::RtcEventLogNullImpl event_log_;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700223 cricket::FakeMediaEngine* media_engine_;
224 cricket::FakeTransportController fake_transport_controller_;
225 cricket::ChannelManager channel_manager_;
226 cricket::FakeCall fake_call_;
227 cricket::FakeMediaController fake_media_controller_;
228 cricket::VoiceChannel* voice_channel_;
229 cricket::VideoChannel* video_channel_;
230 cricket::FakeVoiceMediaChannel* voice_media_channel_;
231 cricket::FakeVideoMediaChannel* video_media_channel_;
deadbeef70ab1a12015-09-28 16:53:55 -0700232 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
233 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
234 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
235 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
236 rtc::scoped_refptr<MediaStreamInterface> stream_;
237 rtc::scoped_refptr<VideoTrackInterface> video_track_;
238 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
239};
240
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700241// Test that |voice_channel_| is updated when an audio track is associated
deadbeef70ab1a12015-09-28 16:53:55 -0700242// and disassociated with an AudioRtpSender.
243TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
244 CreateAudioRtpSender();
245 DestroyAudioRtpSender();
246}
247
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700248// Test that |video_channel_| is updated when a video track is associated and
deadbeef70ab1a12015-09-28 16:53:55 -0700249// disassociated with a VideoRtpSender.
250TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
251 CreateVideoRtpSender();
252 DestroyVideoRtpSender();
253}
254
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700255// Test that |voice_channel_| is updated when a remote audio track is
deadbeef70ab1a12015-09-28 16:53:55 -0700256// associated and disassociated with an AudioRtpReceiver.
257TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
258 CreateAudioRtpReceiver();
259 DestroyAudioRtpReceiver();
260}
261
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700262// Test that |video_channel_| is updated when a remote video track is
263// associated and disassociated with a VideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700264TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
265 CreateVideoRtpReceiver();
266 DestroyVideoRtpReceiver();
267}
268
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700269// Test that the AudioRtpSender applies options from the local audio source.
270TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
271 cricket::AudioOptions options;
272 options.echo_cancellation = rtc::Optional<bool>(true);
273 auto source = LocalAudioSource::Create(
274 PeerConnectionFactoryInterface::Options(), &options);
275 CreateAudioRtpSender(source.get());
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700276
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700277 EXPECT_EQ(rtc::Optional<bool>(true),
278 voice_media_channel_->options().echo_cancellation);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700279
280 DestroyAudioRtpSender();
281}
282
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700283// Test that the stream is muted when the track is disabled, and unmuted when
284// the track is enabled.
285TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
286 CreateAudioRtpSender();
287
288 audio_track_->set_enabled(false);
289 EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
290
291 audio_track_->set_enabled(true);
292 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
293
294 DestroyAudioRtpSender();
295}
296
297// Test that the volume is set to 0 when the track is disabled, and back to
298// 1 when the track is enabled.
deadbeef70ab1a12015-09-28 16:53:55 -0700299TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
300 CreateAudioRtpReceiver();
301
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700302 double volume;
303 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
304 EXPECT_EQ(1, volume);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700305
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700306 audio_track_->set_enabled(false);
307 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
308 EXPECT_EQ(0, volume);
309
deadbeef70ab1a12015-09-28 16:53:55 -0700310 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700311 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
312 EXPECT_EQ(1, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700313
314 DestroyAudioRtpReceiver();
315}
316
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700317// Currently no action is taken when a remote video track is disabled or
318// enabled, so there's nothing to test here, other than what is normally
319// verified in DestroyVideoRtpSender.
deadbeef70ab1a12015-09-28 16:53:55 -0700320TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
321 CreateVideoRtpSender();
322
deadbeef70ab1a12015-09-28 16:53:55 -0700323 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700324 video_track_->set_enabled(true);
325
326 DestroyVideoRtpSender();
327}
328
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700329// Test that the state of the video track created by the VideoRtpReceiver is
330// updated when the receiver is destroyed.
perkjf0dcfe22016-03-10 18:32:00 +0100331TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
332 CreateVideoRtpReceiver();
333
334 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
335 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
336 video_track_->GetSource()->state());
337
338 DestroyVideoRtpReceiver();
339
340 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
341 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
342 video_track_->GetSource()->state());
343}
344
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700345// Currently no action is taken when a remote video track is disabled or
346// enabled, so there's nothing to test here, other than what is normally
347// verified in DestroyVideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700348TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
349 CreateVideoRtpReceiver();
350
351 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700352 video_track_->set_enabled(true);
353
354 DestroyVideoRtpReceiver();
355}
356
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700357// Test that the AudioRtpReceiver applies volume changes from the track source
358// to the media channel.
deadbeef70ab1a12015-09-28 16:53:55 -0700359TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
360 CreateAudioRtpReceiver();
361
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700362 double volume;
363 audio_track_->GetSource()->SetVolume(0.5);
364 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
365 EXPECT_EQ(0.5, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700366
367 // Disable the audio track, this should prevent setting the volume.
deadbeef70ab1a12015-09-28 16:53:55 -0700368 audio_track_->set_enabled(false);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700369 audio_track_->GetSource()->SetVolume(0.8);
370 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
371 EXPECT_EQ(0, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700372
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700373 // When the track is enabled, the previously set volume should take effect.
deadbeef70ab1a12015-09-28 16:53:55 -0700374 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700375 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
376 EXPECT_EQ(0.8, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700377
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700378 // Try changing volume one more time.
379 audio_track_->GetSource()->SetVolume(0.9);
380 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
381 EXPECT_EQ(0.9, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700382
383 DestroyAudioRtpReceiver();
384}
385
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700386// Test that the media channel isn't enabled for sending if the audio sender
387// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800388TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700389 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800390 rtc::scoped_refptr<AudioTrackInterface> track =
391 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700392
393 // Track but no SSRC.
394 EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
395 VerifyVoiceChannelNoInput();
396
397 // SSRC but no track.
398 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
399 audio_rtp_sender_->SetSsrc(kAudioSsrc);
400 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800401}
402
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700403// Test that the media channel isn't enabled for sending if the video sender
404// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800405TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700406 video_rtp_sender_ = new VideoRtpSender(video_channel_);
407
408 // Track but no SSRC.
409 EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
410 VerifyVideoChannelNoInput();
411
412 // SSRC but no track.
413 EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
414 video_rtp_sender_->SetSsrc(kVideoSsrc);
415 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800416}
417
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700418// Test that the media channel is enabled for sending when the audio sender
419// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800420TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700421 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800422 rtc::scoped_refptr<AudioTrackInterface> track =
423 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700424 audio_rtp_sender_->SetSsrc(kAudioSsrc);
425 audio_rtp_sender_->SetTrack(track);
426 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800427
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700428 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800429}
430
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700431// Test that the media channel is enabled for sending when the audio sender
432// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800433TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700434 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800435 rtc::scoped_refptr<AudioTrackInterface> track =
436 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700437 audio_rtp_sender_->SetTrack(track);
438 audio_rtp_sender_->SetSsrc(kAudioSsrc);
439 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800440
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700441 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800442}
443
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700444// Test that the media channel is enabled for sending when the video sender
445// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800446TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
nisseaf510af2016-03-21 08:20:42 -0700447 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700448 video_rtp_sender_ = new VideoRtpSender(video_channel_);
449 video_rtp_sender_->SetSsrc(kVideoSsrc);
450 video_rtp_sender_->SetTrack(video_track_);
451 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800452
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700453 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800454}
455
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700456// Test that the media channel is enabled for sending when the video sender
457// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800458TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
nisseaf510af2016-03-21 08:20:42 -0700459 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700460 video_rtp_sender_ = new VideoRtpSender(video_channel_);
461 video_rtp_sender_->SetTrack(video_track_);
462 video_rtp_sender_->SetSsrc(kVideoSsrc);
463 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800464
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700465 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800466}
467
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700468// Test that the media channel stops sending when the audio sender's SSRC is set
469// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800470TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700471 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800472
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700473 audio_rtp_sender_->SetSsrc(0);
474 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800475}
476
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700477// Test that the media channel stops sending when the video sender's SSRC is set
478// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800479TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700480 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800481
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700482 audio_rtp_sender_->SetSsrc(0);
483 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800484}
485
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700486// Test that the media channel stops sending when the audio sender's track is
487// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800488TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700489 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800490
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700491 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
492 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800493}
494
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700495// Test that the media channel stops sending when the video sender's track is
496// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800497TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700498 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800499
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700500 video_rtp_sender_->SetSsrc(0);
501 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800502}
503
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700504// Test that when the audio sender's SSRC is changed, the media channel stops
505// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800506TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700507 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800508
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700509 audio_rtp_sender_->SetSsrc(kAudioSsrc2);
510 VerifyVoiceChannelNoInput(kAudioSsrc);
511 VerifyVoiceChannelInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800512
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700513 audio_rtp_sender_ = nullptr;
514 VerifyVoiceChannelNoInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800515}
516
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700517// Test that when the audio sender's SSRC is changed, the media channel stops
518// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800519TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700520 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800521
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700522 video_rtp_sender_->SetSsrc(kVideoSsrc2);
523 VerifyVideoChannelNoInput(kVideoSsrc);
524 VerifyVideoChannelInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800525
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700526 video_rtp_sender_ = nullptr;
527 VerifyVideoChannelNoInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800528}
529
skvladdc1c62c2016-03-16 19:07:43 -0700530TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
531 CreateAudioRtpSender();
532
skvladdc1c62c2016-03-16 19:07:43 -0700533 RtpParameters params = audio_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700534 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700535 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
536
537 DestroyAudioRtpSender();
538}
539
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700540TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
541 CreateAudioRtpSender();
542
543 EXPECT_EQ(-1, voice_media_channel_->max_bps());
544 webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
545 EXPECT_EQ(1, params.encodings.size());
546 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
547 params.encodings[0].max_bitrate_bps = 1000;
548 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
549
550 // Read back the parameters and verify they have been changed.
551 params = audio_rtp_sender_->GetParameters();
552 EXPECT_EQ(1, params.encodings.size());
553 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
554
555 // Verify that the audio channel received the new parameters.
556 params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
557 EXPECT_EQ(1, params.encodings.size());
558 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
559
560 // Verify that the global bitrate limit has not been changed.
561 EXPECT_EQ(-1, voice_media_channel_->max_bps());
562
563 DestroyAudioRtpSender();
564}
565
skvladdc1c62c2016-03-16 19:07:43 -0700566TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
567 CreateVideoRtpSender();
568
skvladdc1c62c2016-03-16 19:07:43 -0700569 RtpParameters params = video_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700570 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700571 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
572
573 DestroyVideoRtpSender();
574}
575
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700576TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
577 CreateVideoRtpSender();
578
579 EXPECT_EQ(-1, video_media_channel_->max_bps());
580 webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
581 EXPECT_EQ(1, params.encodings.size());
582 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
583 params.encodings[0].max_bitrate_bps = 1000;
584 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
585
586 // Read back the parameters and verify they have been changed.
587 params = video_rtp_sender_->GetParameters();
588 EXPECT_EQ(1, params.encodings.size());
589 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
590
591 // Verify that the video channel received the new parameters.
592 params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
593 EXPECT_EQ(1, params.encodings.size());
594 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
595
596 // Verify that the global bitrate limit has not been changed.
597 EXPECT_EQ(-1, video_media_channel_->max_bps());
598
599 DestroyVideoRtpSender();
600}
601
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700602TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
603 CreateAudioRtpReceiver();
604
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700605 RtpParameters params = audio_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700606 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700607 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
608
609 DestroyAudioRtpReceiver();
610}
611
612TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
613 CreateVideoRtpReceiver();
614
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700615 RtpParameters params = video_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700616 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700617 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
618
619 DestroyVideoRtpReceiver();
620}
621
deadbeef70ab1a12015-09-28 16:53:55 -0700622} // namespace webrtc