blob: ea0bd646b007638c791ab5e11e64fe23bcdc7c66 [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
kwiberg77eab702016-09-28 17:42:01 -070015#include "webrtc/test/gmock.h"
16#include "webrtc/test/gtest.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010017#include "webrtc/api/audiotrack.h"
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070018#include "webrtc/api/fakemediacontroller.h"
19#include "webrtc/api/localaudiosource.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010020#include "webrtc/api/mediastream.h"
21#include "webrtc/api/remoteaudiosource.h"
22#include "webrtc/api/rtpreceiver.h"
23#include "webrtc/api/rtpsender.h"
24#include "webrtc/api/streamcollection.h"
nisseaf510af2016-03-21 08:20:42 -070025#include "webrtc/api/test/fakevideotracksource.h"
perkj0d3eef22016-03-09 02:39:17 +010026#include "webrtc/api/videotracksource.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010027#include "webrtc/api/videotrack.h"
deadbeef70ab1a12015-09-28 16:53:55 -070028#include "webrtc/base/gunit.h"
kjellandera96e2d72016-02-04 23:52:28 -080029#include "webrtc/media/base/mediachannel.h"
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070030#include "webrtc/media/base/fakemediaengine.h"
31#include "webrtc/media/engine/fakewebrtccall.h"
32#include "webrtc/p2p/base/faketransportcontroller.h"
33#include "webrtc/pc/channelmanager.h"
deadbeef70ab1a12015-09-28 16:53:55 -070034
35using ::testing::_;
36using ::testing::Exactly;
deadbeef5dd42fd2016-05-02 16:20:01 -070037using ::testing::InvokeWithoutArgs;
skvladdc1c62c2016-03-16 19:07:43 -070038using ::testing::Return;
deadbeef70ab1a12015-09-28 16:53:55 -070039
40static 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;
deadbeef70ab1a12015-09-28 16:53:55 -070047
48namespace webrtc {
49
tkchin3784b4a2016-06-24 19:31:47 -070050class RtpSenderReceiverTest : public testing::Test {
51 public:
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070052 RtpSenderReceiverTest()
53 : // Create fake media engine/etc. so we can create channels to use to
54 // test RtpSenders/RtpReceivers.
55 media_engine_(new cricket::FakeMediaEngine()),
56 channel_manager_(media_engine_,
57 rtc::Thread::Current(),
58 rtc::Thread::Current()),
59 fake_call_(webrtc::Call::Config()),
60 fake_media_controller_(&channel_manager_, &fake_call_),
61 stream_(MediaStream::Create(kStreamLabel1)) {
62 // Create channels to be used by the RtpSenders and RtpReceivers.
63 channel_manager_.Init();
64 voice_channel_ = channel_manager_.CreateVoiceChannel(
65 &fake_media_controller_, &fake_transport_controller_, cricket::CN_AUDIO,
66 nullptr, false, cricket::AudioOptions());
67 video_channel_ = channel_manager_.CreateVideoChannel(
68 &fake_media_controller_, &fake_transport_controller_, cricket::CN_VIDEO,
69 nullptr, false, cricket::VideoOptions());
70 voice_media_channel_ = media_engine_->GetVoiceChannel(0);
71 video_media_channel_ = media_engine_->GetVideoChannel(0);
72 RTC_CHECK(voice_channel_);
73 RTC_CHECK(video_channel_);
74 RTC_CHECK(voice_media_channel_);
75 RTC_CHECK(video_media_channel_);
76
77 // Create streams for predefined SSRCs. Streams need to exist in order
78 // for the senders and receievers to apply parameters to them.
79 // Normally these would be created by SetLocalDescription and
80 // SetRemoteDescription.
81 voice_media_channel_->AddSendStream(
82 cricket::StreamParams::CreateLegacy(kAudioSsrc));
83 voice_media_channel_->AddRecvStream(
84 cricket::StreamParams::CreateLegacy(kAudioSsrc));
85 voice_media_channel_->AddSendStream(
86 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
87 voice_media_channel_->AddRecvStream(
88 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
89 video_media_channel_->AddSendStream(
90 cricket::StreamParams::CreateLegacy(kVideoSsrc));
91 video_media_channel_->AddRecvStream(
92 cricket::StreamParams::CreateLegacy(kVideoSsrc));
93 video_media_channel_->AddSendStream(
94 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
95 video_media_channel_->AddRecvStream(
96 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
tkchin3784b4a2016-06-24 19:31:47 -070097 }
Taylor Brandstetter2d549172016-06-24 14:18:22 -070098
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -070099 void TearDown() override { channel_manager_.Terminate(); }
100
nisseaf510af2016-03-21 08:20:42 -0700101 void AddVideoTrack() {
perkja3ede6c2016-03-08 01:27:48 +0100102 rtc::scoped_refptr<VideoTrackSourceInterface> source(
nisseaf510af2016-03-21 08:20:42 -0700103 FakeVideoTrackSource::Create());
deadbeef70ab1a12015-09-28 16:53:55 -0700104 video_track_ = VideoTrack::Create(kVideoTrackId, source);
105 EXPECT_TRUE(stream_->AddTrack(video_track_));
106 }
107
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700108 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
109
110 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
111 audio_track_ = AudioTrack::Create(kAudioTrackId, source);
deadbeef70ab1a12015-09-28 16:53:55 -0700112 EXPECT_TRUE(stream_->AddTrack(audio_track_));
deadbeeffac06552015-11-25 11:26:01 -0800113 audio_rtp_sender_ =
114 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700115 voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800116 audio_rtp_sender_->SetSsrc(kAudioSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700117 VerifyVoiceChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700118 }
119
120 void CreateVideoRtpSender() {
nisseaf510af2016-03-21 08:20:42 -0700121 AddVideoTrack();
deadbeef70ab1a12015-09-28 16:53:55 -0700122 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700123 stream_->label(), video_channel_);
deadbeeffac06552015-11-25 11:26:01 -0800124 video_rtp_sender_->SetSsrc(kVideoSsrc);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700125 VerifyVideoChannelInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700126 }
127
128 void DestroyAudioRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700129 audio_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700130 VerifyVoiceChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700131 }
132
133 void DestroyVideoRtpSender() {
deadbeef70ab1a12015-09-28 16:53:55 -0700134 video_rtp_sender_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700135 VerifyVideoChannelNoInput();
deadbeef70ab1a12015-09-28 16:53:55 -0700136 }
137
138 void CreateAudioRtpReceiver() {
tommi6eca7e32015-12-15 04:27:11 -0800139 audio_track_ = AudioTrack::Create(
Tommif888bb52015-12-12 01:37:01 +0100140 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
deadbeef70ab1a12015-09-28 16:53:55 -0700141 EXPECT_TRUE(stream_->AddTrack(audio_track_));
perkjd61bf802016-03-24 03:16:19 -0700142 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700143 kAudioSsrc, voice_channel_);
perkjd61bf802016-03-24 03:16:19 -0700144 audio_track_ = audio_rtp_receiver_->audio_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700145 VerifyVoiceChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700146 }
147
148 void CreateVideoRtpReceiver() {
perkjf0dcfe22016-03-10 18:32:00 +0100149 video_rtp_receiver_ =
150 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700151 kVideoSsrc, video_channel_);
perkjf0dcfe22016-03-10 18:32:00 +0100152 video_track_ = video_rtp_receiver_->video_track();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700153 VerifyVideoChannelOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700154 }
155
156 void DestroyAudioRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700157 audio_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700158 VerifyVoiceChannelNoOutput();
deadbeef70ab1a12015-09-28 16:53:55 -0700159 }
160
161 void DestroyVideoRtpReceiver() {
deadbeef70ab1a12015-09-28 16:53:55 -0700162 video_rtp_receiver_ = nullptr;
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700163 VerifyVideoChannelNoOutput();
164 }
165
166 void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
167
168 void VerifyVoiceChannelInput(uint32_t ssrc) {
169 // Verify that the media channel has an audio source, and the stream isn't
170 // muted.
171 EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
172 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
173 }
174
175 void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
176
177 void VerifyVideoChannelInput(uint32_t ssrc) {
178 // Verify that the media channel has a video source,
179 EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
180 }
181
182 void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
183
184 void VerifyVoiceChannelNoInput(uint32_t ssrc) {
185 // Verify that the media channel's source is reset.
186 EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
187 }
188
189 void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
190
191 void VerifyVideoChannelNoInput(uint32_t ssrc) {
192 // Verify that the media channel's source is reset.
193 EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
194 }
195
196 void VerifyVoiceChannelOutput() {
197 // Verify that the volume is initialized to 1.
198 double volume;
199 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
200 EXPECT_EQ(1, volume);
201 }
202
203 void VerifyVideoChannelOutput() {
204 // Verify that the media channel has a sink.
205 EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
206 }
207
208 void VerifyVoiceChannelNoOutput() {
209 // Verify that the volume is reset to 0.
210 double volume;
211 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
212 EXPECT_EQ(0, volume);
213 }
214
215 void VerifyVideoChannelNoOutput() {
216 // Verify that the media channel's sink is reset.
217 EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
deadbeef70ab1a12015-09-28 16:53:55 -0700218 }
219
220 protected:
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700221 cricket::FakeMediaEngine* media_engine_;
222 cricket::FakeTransportController fake_transport_controller_;
223 cricket::ChannelManager channel_manager_;
224 cricket::FakeCall fake_call_;
225 cricket::FakeMediaController fake_media_controller_;
226 cricket::VoiceChannel* voice_channel_;
227 cricket::VideoChannel* video_channel_;
228 cricket::FakeVoiceMediaChannel* voice_media_channel_;
229 cricket::FakeVideoMediaChannel* video_media_channel_;
deadbeef70ab1a12015-09-28 16:53:55 -0700230 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
231 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
232 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
233 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
234 rtc::scoped_refptr<MediaStreamInterface> stream_;
235 rtc::scoped_refptr<VideoTrackInterface> video_track_;
236 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
237};
238
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700239// Test that |voice_channel_| is updated when an audio track is associated
deadbeef70ab1a12015-09-28 16:53:55 -0700240// and disassociated with an AudioRtpSender.
241TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
242 CreateAudioRtpSender();
243 DestroyAudioRtpSender();
244}
245
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700246// Test that |video_channel_| is updated when a video track is associated and
deadbeef70ab1a12015-09-28 16:53:55 -0700247// disassociated with a VideoRtpSender.
248TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
249 CreateVideoRtpSender();
250 DestroyVideoRtpSender();
251}
252
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700253// Test that |voice_channel_| is updated when a remote audio track is
deadbeef70ab1a12015-09-28 16:53:55 -0700254// associated and disassociated with an AudioRtpReceiver.
255TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
256 CreateAudioRtpReceiver();
257 DestroyAudioRtpReceiver();
258}
259
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700260// Test that |video_channel_| is updated when a remote video track is
261// associated and disassociated with a VideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700262TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
263 CreateVideoRtpReceiver();
264 DestroyVideoRtpReceiver();
265}
266
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700267// Test that the AudioRtpSender applies options from the local audio source.
268TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
269 cricket::AudioOptions options;
270 options.echo_cancellation = rtc::Optional<bool>(true);
271 auto source = LocalAudioSource::Create(
272 PeerConnectionFactoryInterface::Options(), &options);
273 CreateAudioRtpSender(source.get());
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700274
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700275 EXPECT_EQ(rtc::Optional<bool>(true),
276 voice_media_channel_->options().echo_cancellation);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700277
278 DestroyAudioRtpSender();
279}
280
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700281// Test that the stream is muted when the track is disabled, and unmuted when
282// the track is enabled.
283TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
284 CreateAudioRtpSender();
285
286 audio_track_->set_enabled(false);
287 EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
288
289 audio_track_->set_enabled(true);
290 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
291
292 DestroyAudioRtpSender();
293}
294
295// Test that the volume is set to 0 when the track is disabled, and back to
296// 1 when the track is enabled.
deadbeef70ab1a12015-09-28 16:53:55 -0700297TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
298 CreateAudioRtpReceiver();
299
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700300 double volume;
301 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
302 EXPECT_EQ(1, volume);
Taylor Brandstetter2d549172016-06-24 14:18:22 -0700303
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700304 audio_track_->set_enabled(false);
305 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
306 EXPECT_EQ(0, volume);
307
deadbeef70ab1a12015-09-28 16:53:55 -0700308 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700309 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
310 EXPECT_EQ(1, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700311
312 DestroyAudioRtpReceiver();
313}
314
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700315// Currently no action is taken when a remote video track is disabled or
316// enabled, so there's nothing to test here, other than what is normally
317// verified in DestroyVideoRtpSender.
deadbeef70ab1a12015-09-28 16:53:55 -0700318TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
319 CreateVideoRtpSender();
320
deadbeef70ab1a12015-09-28 16:53:55 -0700321 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700322 video_track_->set_enabled(true);
323
324 DestroyVideoRtpSender();
325}
326
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700327// Test that the state of the video track created by the VideoRtpReceiver is
328// updated when the receiver is destroyed.
perkjf0dcfe22016-03-10 18:32:00 +0100329TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
330 CreateVideoRtpReceiver();
331
332 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
333 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
334 video_track_->GetSource()->state());
335
336 DestroyVideoRtpReceiver();
337
338 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
339 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
340 video_track_->GetSource()->state());
341}
342
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700343// Currently no action is taken when a remote video track is disabled or
344// enabled, so there's nothing to test here, other than what is normally
345// verified in DestroyVideoRtpReceiver.
deadbeef70ab1a12015-09-28 16:53:55 -0700346TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
347 CreateVideoRtpReceiver();
348
349 video_track_->set_enabled(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700350 video_track_->set_enabled(true);
351
352 DestroyVideoRtpReceiver();
353}
354
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700355// Test that the AudioRtpReceiver applies volume changes from the track source
356// to the media channel.
deadbeef70ab1a12015-09-28 16:53:55 -0700357TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
358 CreateAudioRtpReceiver();
359
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700360 double volume;
361 audio_track_->GetSource()->SetVolume(0.5);
362 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
363 EXPECT_EQ(0.5, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700364
365 // Disable the audio track, this should prevent setting the volume.
deadbeef70ab1a12015-09-28 16:53:55 -0700366 audio_track_->set_enabled(false);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700367 audio_track_->GetSource()->SetVolume(0.8);
368 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
369 EXPECT_EQ(0, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700370
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700371 // When the track is enabled, the previously set volume should take effect.
deadbeef70ab1a12015-09-28 16:53:55 -0700372 audio_track_->set_enabled(true);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700373 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
374 EXPECT_EQ(0.8, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700375
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700376 // Try changing volume one more time.
377 audio_track_->GetSource()->SetVolume(0.9);
378 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
379 EXPECT_EQ(0.9, volume);
deadbeef70ab1a12015-09-28 16:53:55 -0700380
381 DestroyAudioRtpReceiver();
382}
383
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700384// Test that the media channel isn't enabled for sending if the audio sender
385// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800386TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700387 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800388 rtc::scoped_refptr<AudioTrackInterface> track =
389 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700390
391 // Track but no SSRC.
392 EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
393 VerifyVoiceChannelNoInput();
394
395 // SSRC but no track.
396 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
397 audio_rtp_sender_->SetSsrc(kAudioSsrc);
398 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800399}
400
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700401// Test that the media channel isn't enabled for sending if the video sender
402// doesn't have both a track and SSRC.
deadbeeffac06552015-11-25 11:26:01 -0800403TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700404 video_rtp_sender_ = new VideoRtpSender(video_channel_);
405
406 // Track but no SSRC.
407 EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
408 VerifyVideoChannelNoInput();
409
410 // SSRC but no track.
411 EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
412 video_rtp_sender_->SetSsrc(kVideoSsrc);
413 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800414}
415
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700416// Test that the media channel is enabled for sending when the audio sender
417// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800418TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700419 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800420 rtc::scoped_refptr<AudioTrackInterface> track =
421 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700422 audio_rtp_sender_->SetSsrc(kAudioSsrc);
423 audio_rtp_sender_->SetTrack(track);
424 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800425
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700426 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800427}
428
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700429// Test that the media channel is enabled for sending when the audio sender
430// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800431TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700432 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
deadbeeffac06552015-11-25 11:26:01 -0800433 rtc::scoped_refptr<AudioTrackInterface> track =
434 AudioTrack::Create(kAudioTrackId, nullptr);
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700435 audio_rtp_sender_->SetTrack(track);
436 audio_rtp_sender_->SetSsrc(kAudioSsrc);
437 VerifyVoiceChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800438
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700439 DestroyAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800440}
441
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700442// Test that the media channel is enabled for sending when the video sender
443// has a track and SSRC, when the SSRC is set first.
deadbeeffac06552015-11-25 11:26:01 -0800444TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
nisseaf510af2016-03-21 08:20:42 -0700445 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700446 video_rtp_sender_ = new VideoRtpSender(video_channel_);
447 video_rtp_sender_->SetSsrc(kVideoSsrc);
448 video_rtp_sender_->SetTrack(video_track_);
449 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800450
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700451 DestroyVideoRtpSender();
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 video sender
455// has a track and SSRC, when the SSRC is set last.
deadbeeffac06552015-11-25 11:26:01 -0800456TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
nisseaf510af2016-03-21 08:20:42 -0700457 AddVideoTrack();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700458 video_rtp_sender_ = new VideoRtpSender(video_channel_);
459 video_rtp_sender_->SetTrack(video_track_);
460 video_rtp_sender_->SetSsrc(kVideoSsrc);
461 VerifyVideoChannelInput();
deadbeeffac06552015-11-25 11:26:01 -0800462
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700463 DestroyVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800464}
465
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700466// Test that the media channel stops sending when the audio sender's SSRC is set
467// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800468TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700469 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800470
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700471 audio_rtp_sender_->SetSsrc(0);
472 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800473}
474
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700475// Test that the media channel stops sending when the video sender's SSRC is set
476// to 0.
deadbeeffac06552015-11-25 11:26:01 -0800477TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700478 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800479
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700480 audio_rtp_sender_->SetSsrc(0);
481 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800482}
483
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700484// Test that the media channel stops sending when the audio sender's track is
485// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800486TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700487 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800488
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700489 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
490 VerifyVoiceChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800491}
492
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700493// Test that the media channel stops sending when the video sender's track is
494// set to null.
deadbeeffac06552015-11-25 11:26:01 -0800495TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700496 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800497
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700498 video_rtp_sender_->SetSsrc(0);
499 VerifyVideoChannelNoInput();
deadbeeffac06552015-11-25 11:26:01 -0800500}
501
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700502// Test that when the audio sender's SSRC is changed, the media channel stops
503// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800504TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700505 CreateAudioRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800506
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700507 audio_rtp_sender_->SetSsrc(kAudioSsrc2);
508 VerifyVoiceChannelNoInput(kAudioSsrc);
509 VerifyVoiceChannelInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800510
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700511 audio_rtp_sender_ = nullptr;
512 VerifyVoiceChannelNoInput(kAudioSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800513}
514
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700515// Test that when the audio sender's SSRC is changed, the media channel stops
516// sending with the old SSRC and starts sending with the new one.
deadbeeffac06552015-11-25 11:26:01 -0800517TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700518 CreateVideoRtpSender();
deadbeeffac06552015-11-25 11:26:01 -0800519
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700520 video_rtp_sender_->SetSsrc(kVideoSsrc2);
521 VerifyVideoChannelNoInput(kVideoSsrc);
522 VerifyVideoChannelInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800523
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700524 video_rtp_sender_ = nullptr;
525 VerifyVideoChannelNoInput(kVideoSsrc2);
deadbeeffac06552015-11-25 11:26:01 -0800526}
527
skvladdc1c62c2016-03-16 19:07:43 -0700528TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
529 CreateAudioRtpSender();
530
skvladdc1c62c2016-03-16 19:07:43 -0700531 RtpParameters params = audio_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700532 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700533 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
534
535 DestroyAudioRtpSender();
536}
537
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700538TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
539 CreateAudioRtpSender();
540
541 EXPECT_EQ(-1, voice_media_channel_->max_bps());
542 webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
543 EXPECT_EQ(1, params.encodings.size());
544 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
545 params.encodings[0].max_bitrate_bps = 1000;
546 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
547
548 // Read back the parameters and verify they have been changed.
549 params = audio_rtp_sender_->GetParameters();
550 EXPECT_EQ(1, params.encodings.size());
551 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
552
553 // Verify that the audio channel received the new parameters.
554 params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
555 EXPECT_EQ(1, params.encodings.size());
556 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
557
558 // Verify that the global bitrate limit has not been changed.
559 EXPECT_EQ(-1, voice_media_channel_->max_bps());
560
561 DestroyAudioRtpSender();
562}
563
skvladdc1c62c2016-03-16 19:07:43 -0700564TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
565 CreateVideoRtpSender();
566
skvladdc1c62c2016-03-16 19:07:43 -0700567 RtpParameters params = video_rtp_sender_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700568 EXPECT_EQ(1u, params.encodings.size());
skvladdc1c62c2016-03-16 19:07:43 -0700569 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
570
571 DestroyVideoRtpSender();
572}
573
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700574TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
575 CreateVideoRtpSender();
576
577 EXPECT_EQ(-1, video_media_channel_->max_bps());
578 webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
579 EXPECT_EQ(1, params.encodings.size());
580 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
581 params.encodings[0].max_bitrate_bps = 1000;
582 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
583
584 // Read back the parameters and verify they have been changed.
585 params = video_rtp_sender_->GetParameters();
586 EXPECT_EQ(1, params.encodings.size());
587 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
588
589 // Verify that the video channel received the new parameters.
590 params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
591 EXPECT_EQ(1, params.encodings.size());
592 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
593
594 // Verify that the global bitrate limit has not been changed.
595 EXPECT_EQ(-1, video_media_channel_->max_bps());
596
597 DestroyVideoRtpSender();
598}
599
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700600TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
601 CreateAudioRtpReceiver();
602
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700603 RtpParameters params = audio_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700604 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700605 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
606
607 DestroyAudioRtpReceiver();
608}
609
610TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
611 CreateVideoRtpReceiver();
612
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700613 RtpParameters params = video_rtp_receiver_->GetParameters();
Taylor Brandstetterba29c6a2016-06-27 16:30:35 -0700614 EXPECT_EQ(1u, params.encodings.size());
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700615 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
616
617 DestroyVideoRtpReceiver();
618}
619
deadbeef70ab1a12015-09-28 16:53:55 -0700620} // namespace webrtc