blob: 7f32f29bc4bf40e48a0a3114afed296b57576b47 [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
11#include <string>
Tommif888bb52015-12-12 01:37:01 +010012#include <utility>
deadbeef70ab1a12015-09-28 16:53:55 -070013
deadbeef70ab1a12015-09-28 16:53:55 -070014#include "testing/gmock/include/gmock/gmock.h"
15#include "testing/gtest/include/gtest/gtest.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010016#include "webrtc/api/audiotrack.h"
17#include "webrtc/api/mediastream.h"
18#include "webrtc/api/remoteaudiosource.h"
19#include "webrtc/api/rtpreceiver.h"
20#include "webrtc/api/rtpsender.h"
21#include "webrtc/api/streamcollection.h"
nisseaf510af2016-03-21 08:20:42 -070022#include "webrtc/api/test/fakevideotracksource.h"
perkj0d3eef22016-03-09 02:39:17 +010023#include "webrtc/api/videotracksource.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010024#include "webrtc/api/videotrack.h"
deadbeef70ab1a12015-09-28 16:53:55 -070025#include "webrtc/base/gunit.h"
kjellandera96e2d72016-02-04 23:52:28 -080026#include "webrtc/media/base/mediachannel.h"
deadbeef70ab1a12015-09-28 16:53:55 -070027
28using ::testing::_;
29using ::testing::Exactly;
skvladdc1c62c2016-03-16 19:07:43 -070030using ::testing::Return;
deadbeef70ab1a12015-09-28 16:53:55 -070031
32static const char kStreamLabel1[] = "local_stream_1";
33static const char kVideoTrackId[] = "video_1";
34static const char kAudioTrackId[] = "audio_1";
Peter Boström0c4e06b2015-10-07 12:23:21 +020035static const uint32_t kVideoSsrc = 98;
deadbeeffac06552015-11-25 11:26:01 -080036static const uint32_t kVideoSsrc2 = 100;
Peter Boström0c4e06b2015-10-07 12:23:21 +020037static const uint32_t kAudioSsrc = 99;
deadbeeffac06552015-11-25 11:26:01 -080038static const uint32_t kAudioSsrc2 = 101;
deadbeef70ab1a12015-09-28 16:53:55 -070039
40namespace webrtc {
41
42// Helper class to test RtpSender/RtpReceiver.
43class MockAudioProvider : public AudioProviderInterface {
44 public:
Tommif888bb52015-12-12 01:37:01 +010045 ~MockAudioProvider() override {}
46
solenbergd4cec0d2015-10-09 08:55:48 -070047 MOCK_METHOD2(SetAudioPlayout,
Peter Boström0c4e06b2015-10-07 12:23:21 +020048 void(uint32_t ssrc,
solenbergd4cec0d2015-10-09 08:55:48 -070049 bool enable));
deadbeef70ab1a12015-09-28 16:53:55 -070050 MOCK_METHOD4(SetAudioSend,
Peter Boström0c4e06b2015-10-07 12:23:21 +020051 void(uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070052 bool enable,
53 const cricket::AudioOptions& options,
Taylor Brandstetter1a018dc2016-03-08 12:37:39 -080054 cricket::AudioSource* source));
Peter Boström0c4e06b2015-10-07 12:23:21 +020055 MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume));
skvladdc1c62c2016-03-16 19:07:43 -070056 MOCK_CONST_METHOD1(GetAudioRtpParameters, RtpParameters(uint32_t ssrc));
57 MOCK_METHOD2(SetAudioRtpParameters,
58 bool(uint32_t ssrc, const RtpParameters&));
Tommif888bb52015-12-12 01:37:01 +010059
deadbeef2d110be2016-01-13 12:00:26 -080060 void SetRawAudioSink(uint32_t,
61 rtc::scoped_ptr<AudioSinkInterface> sink) override {
62 sink_ = std::move(sink);
Tommif888bb52015-12-12 01:37:01 +010063 }
64
65 private:
deadbeef2d110be2016-01-13 12:00:26 -080066 rtc::scoped_ptr<AudioSinkInterface> sink_;
deadbeef70ab1a12015-09-28 16:53:55 -070067};
68
69// Helper class to test RtpSender/RtpReceiver.
70class MockVideoProvider : public VideoProviderInterface {
71 public:
72 virtual ~MockVideoProvider() {}
73 MOCK_METHOD2(SetCaptureDevice,
Peter Boström0c4e06b2015-10-07 12:23:21 +020074 bool(uint32_t ssrc, cricket::VideoCapturer* camera));
deadbeef70ab1a12015-09-28 16:53:55 -070075 MOCK_METHOD3(SetVideoPlayout,
Peter Boström0c4e06b2015-10-07 12:23:21 +020076 void(uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070077 bool enable,
nisse08582ff2016-02-04 01:24:52 -080078 rtc::VideoSinkInterface<cricket::VideoFrame>* sink));
deadbeef70ab1a12015-09-28 16:53:55 -070079 MOCK_METHOD3(SetVideoSend,
Peter Boström0c4e06b2015-10-07 12:23:21 +020080 void(uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070081 bool enable,
82 const cricket::VideoOptions* options));
skvladdc1c62c2016-03-16 19:07:43 -070083
84 MOCK_CONST_METHOD1(GetVideoRtpParameters, RtpParameters(uint32_t ssrc));
85 MOCK_METHOD2(SetVideoRtpParameters,
86 bool(uint32_t ssrc, const RtpParameters&));
deadbeef70ab1a12015-09-28 16:53:55 -070087};
88
deadbeef70ab1a12015-09-28 16:53:55 -070089class RtpSenderReceiverTest : public testing::Test {
90 public:
91 virtual void SetUp() {
92 stream_ = MediaStream::Create(kStreamLabel1);
tommi6eca7e32015-12-15 04:27:11 -080093 }
94
nisseaf510af2016-03-21 08:20:42 -070095 void AddVideoTrack() {
perkja3ede6c2016-03-08 01:27:48 +010096 rtc::scoped_refptr<VideoTrackSourceInterface> source(
nisseaf510af2016-03-21 08:20:42 -070097 FakeVideoTrackSource::Create());
deadbeef70ab1a12015-09-28 16:53:55 -070098 video_track_ = VideoTrack::Create(kVideoTrackId, source);
99 EXPECT_TRUE(stream_->AddTrack(video_track_));
100 }
101
102 void CreateAudioRtpSender() {
103 audio_track_ = AudioTrack::Create(kAudioTrackId, NULL);
104 EXPECT_TRUE(stream_->AddTrack(audio_track_));
105 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
deadbeeffac06552015-11-25 11:26:01 -0800106 audio_rtp_sender_ =
107 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
108 &audio_provider_, nullptr);
109 audio_rtp_sender_->SetSsrc(kAudioSsrc);
deadbeef70ab1a12015-09-28 16:53:55 -0700110 }
111
112 void CreateVideoRtpSender() {
nisseaf510af2016-03-21 08:20:42 -0700113 AddVideoTrack();
deadbeef70ab1a12015-09-28 16:53:55 -0700114 EXPECT_CALL(video_provider_,
115 SetCaptureDevice(
116 kVideoSsrc, video_track_->GetSource()->GetVideoCapturer()));
117 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
118 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
deadbeeffac06552015-11-25 11:26:01 -0800119 stream_->label(), &video_provider_);
120 video_rtp_sender_->SetSsrc(kVideoSsrc);
deadbeef70ab1a12015-09-28 16:53:55 -0700121 }
122
123 void DestroyAudioRtpSender() {
124 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _))
125 .Times(1);
126 audio_rtp_sender_ = nullptr;
127 }
128
129 void DestroyVideoRtpSender() {
130 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, NULL)).Times(1);
131 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
132 video_rtp_sender_ = nullptr;
133 }
134
135 void CreateAudioRtpReceiver() {
tommi6eca7e32015-12-15 04:27:11 -0800136 audio_track_ = AudioTrack::Create(
Tommif888bb52015-12-12 01:37:01 +0100137 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
deadbeef70ab1a12015-09-28 16:53:55 -0700138 EXPECT_TRUE(stream_->AddTrack(audio_track_));
solenbergd4cec0d2015-10-09 08:55:48 -0700139 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
perkjd61bf802016-03-24 03:16:19 -0700140 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
deadbeef70ab1a12015-09-28 16:53:55 -0700141 kAudioSsrc, &audio_provider_);
perkjd61bf802016-03-24 03:16:19 -0700142 audio_track_ = audio_rtp_receiver_->audio_track();
deadbeef70ab1a12015-09-28 16:53:55 -0700143 }
144
145 void CreateVideoRtpReceiver() {
perkjf0dcfe22016-03-10 18:32:00 +0100146 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, true, _));
147 video_rtp_receiver_ =
148 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
149 kVideoSsrc, &video_provider_);
150 video_track_ = video_rtp_receiver_->video_track();
deadbeef70ab1a12015-09-28 16:53:55 -0700151 }
152
153 void DestroyAudioRtpReceiver() {
solenbergd4cec0d2015-10-09 08:55:48 -0700154 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
deadbeef70ab1a12015-09-28 16:53:55 -0700155 audio_rtp_receiver_ = nullptr;
156 }
157
158 void DestroyVideoRtpReceiver() {
159 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, false, NULL));
160 video_rtp_receiver_ = nullptr;
161 }
162
163 protected:
164 MockAudioProvider audio_provider_;
165 MockVideoProvider video_provider_;
166 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
167 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
168 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
169 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
170 rtc::scoped_refptr<MediaStreamInterface> stream_;
171 rtc::scoped_refptr<VideoTrackInterface> video_track_;
172 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
173};
174
175// Test that |audio_provider_| is notified when an audio track is associated
176// and disassociated with an AudioRtpSender.
177TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
178 CreateAudioRtpSender();
179 DestroyAudioRtpSender();
180}
181
182// Test that |video_provider_| is notified when a video track is associated and
183// disassociated with a VideoRtpSender.
184TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
185 CreateVideoRtpSender();
186 DestroyVideoRtpSender();
187}
188
189// Test that |audio_provider_| is notified when a remote audio and track is
190// associated and disassociated with an AudioRtpReceiver.
191TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
192 CreateAudioRtpReceiver();
193 DestroyAudioRtpReceiver();
194}
195
196// Test that |video_provider_| is notified when a remote
197// video track is associated and disassociated with a VideoRtpReceiver.
198TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
199 CreateVideoRtpReceiver();
200 DestroyVideoRtpReceiver();
201}
202
203TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
204 CreateAudioRtpSender();
205
206 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _));
207 audio_track_->set_enabled(false);
208
209 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
210 audio_track_->set_enabled(true);
211
212 DestroyAudioRtpSender();
213}
214
215TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
216 CreateAudioRtpReceiver();
217
solenbergd4cec0d2015-10-09 08:55:48 -0700218 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
deadbeef70ab1a12015-09-28 16:53:55 -0700219 audio_track_->set_enabled(false);
220
solenbergd4cec0d2015-10-09 08:55:48 -0700221 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
deadbeef70ab1a12015-09-28 16:53:55 -0700222 audio_track_->set_enabled(true);
223
224 DestroyAudioRtpReceiver();
225}
226
227TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
228 CreateVideoRtpSender();
229
230 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _));
231 video_track_->set_enabled(false);
232
233 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
234 video_track_->set_enabled(true);
235
236 DestroyVideoRtpSender();
237}
238
perkjf0dcfe22016-03-10 18:32:00 +0100239TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
240 CreateVideoRtpReceiver();
241
242 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
243 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
244 video_track_->GetSource()->state());
245
246 DestroyVideoRtpReceiver();
247
248 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
249 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
250 video_track_->GetSource()->state());
251}
252
deadbeef70ab1a12015-09-28 16:53:55 -0700253TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
254 CreateVideoRtpReceiver();
255
256 video_track_->set_enabled(false);
257
258 video_track_->set_enabled(true);
259
260 DestroyVideoRtpReceiver();
261}
262
263TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
264 CreateAudioRtpReceiver();
265
266 double volume = 0.5;
267 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, volume));
268 audio_track_->GetSource()->SetVolume(volume);
269
270 // Disable the audio track, this should prevent setting the volume.
solenbergd4cec0d2015-10-09 08:55:48 -0700271 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
deadbeef70ab1a12015-09-28 16:53:55 -0700272 audio_track_->set_enabled(false);
273 audio_track_->GetSource()->SetVolume(1.0);
274
solenbergd4cec0d2015-10-09 08:55:48 -0700275 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
deadbeef70ab1a12015-09-28 16:53:55 -0700276 audio_track_->set_enabled(true);
277
278 double new_volume = 0.8;
279 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, new_volume));
280 audio_track_->GetSource()->SetVolume(new_volume);
281
282 DestroyAudioRtpReceiver();
283}
284
deadbeeffac06552015-11-25 11:26:01 -0800285// Test that provider methods aren't called without both a track and an SSRC.
286TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
287 rtc::scoped_refptr<AudioRtpSender> sender =
288 new AudioRtpSender(&audio_provider_, nullptr);
289 rtc::scoped_refptr<AudioTrackInterface> track =
290 AudioTrack::Create(kAudioTrackId, nullptr);
291 EXPECT_TRUE(sender->SetTrack(track));
292 EXPECT_TRUE(sender->SetTrack(nullptr));
293 sender->SetSsrc(kAudioSsrc);
294 sender->SetSsrc(0);
295 // Just let it get destroyed and make sure it doesn't call any methods on the
296 // provider interface.
297}
298
299// Test that provider methods aren't called without both a track and an SSRC.
300TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
301 rtc::scoped_refptr<VideoRtpSender> sender =
302 new VideoRtpSender(&video_provider_);
303 EXPECT_TRUE(sender->SetTrack(video_track_));
304 EXPECT_TRUE(sender->SetTrack(nullptr));
305 sender->SetSsrc(kVideoSsrc);
306 sender->SetSsrc(0);
307 // Just let it get destroyed and make sure it doesn't call any methods on the
308 // provider interface.
309}
310
311// Test that an audio sender calls the expected methods on the provider once
312// it has a track and SSRC, when the SSRC is set first.
313TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
314 rtc::scoped_refptr<AudioRtpSender> sender =
315 new AudioRtpSender(&audio_provider_, nullptr);
316 rtc::scoped_refptr<AudioTrackInterface> track =
317 AudioTrack::Create(kAudioTrackId, nullptr);
318 sender->SetSsrc(kAudioSsrc);
319 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
320 sender->SetTrack(track);
321
322 // Calls expected from destructor.
323 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
324}
325
326// Test that an audio sender calls the expected methods on the provider once
327// it has a track and SSRC, when the SSRC is set last.
328TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
329 rtc::scoped_refptr<AudioRtpSender> sender =
330 new AudioRtpSender(&audio_provider_, nullptr);
331 rtc::scoped_refptr<AudioTrackInterface> track =
332 AudioTrack::Create(kAudioTrackId, nullptr);
333 sender->SetTrack(track);
334 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
335 sender->SetSsrc(kAudioSsrc);
336
337 // Calls expected from destructor.
338 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
339}
340
341// Test that a video sender calls the expected methods on the provider once
342// it has a track and SSRC, when the SSRC is set first.
343TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
nisseaf510af2016-03-21 08:20:42 -0700344 AddVideoTrack();
deadbeeffac06552015-11-25 11:26:01 -0800345 rtc::scoped_refptr<VideoRtpSender> sender =
346 new VideoRtpSender(&video_provider_);
347 sender->SetSsrc(kVideoSsrc);
348 EXPECT_CALL(video_provider_,
349 SetCaptureDevice(kVideoSsrc,
350 video_track_->GetSource()->GetVideoCapturer()));
351 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
352 sender->SetTrack(video_track_);
353
354 // Calls expected from destructor.
355 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
356 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
357}
358
359// Test that a video sender calls the expected methods on the provider once
360// it has a track and SSRC, when the SSRC is set last.
361TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
nisseaf510af2016-03-21 08:20:42 -0700362 AddVideoTrack();
deadbeeffac06552015-11-25 11:26:01 -0800363 rtc::scoped_refptr<VideoRtpSender> sender =
364 new VideoRtpSender(&video_provider_);
365 sender->SetTrack(video_track_);
366 EXPECT_CALL(video_provider_,
367 SetCaptureDevice(kVideoSsrc,
368 video_track_->GetSource()->GetVideoCapturer()));
369 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
370 sender->SetSsrc(kVideoSsrc);
371
372 // Calls expected from destructor.
373 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
374 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
375}
376
377// Test that the sender is disconnected from the provider when its SSRC is
378// set to 0.
379TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
380 rtc::scoped_refptr<AudioTrackInterface> track =
381 AudioTrack::Create(kAudioTrackId, nullptr);
382 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
383 rtc::scoped_refptr<AudioRtpSender> sender =
384 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
385 sender->SetSsrc(kAudioSsrc);
386
387 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
388 sender->SetSsrc(0);
389
390 // Make sure it's SetSsrc that called methods on the provider, and not the
391 // destructor.
392 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
393}
394
395// Test that the sender is disconnected from the provider when its SSRC is
396// set to 0.
397TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
nisseaf510af2016-03-21 08:20:42 -0700398 AddVideoTrack();
deadbeeffac06552015-11-25 11:26:01 -0800399 EXPECT_CALL(video_provider_,
400 SetCaptureDevice(kVideoSsrc,
401 video_track_->GetSource()->GetVideoCapturer()));
402 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
403 rtc::scoped_refptr<VideoRtpSender> sender =
404 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
405 sender->SetSsrc(kVideoSsrc);
406
407 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
408 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
409 sender->SetSsrc(0);
410
411 // Make sure it's SetSsrc that called methods on the provider, and not the
412 // destructor.
413 EXPECT_CALL(video_provider_, SetCaptureDevice(_, _)).Times(0);
414 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _)).Times(0);
415}
416
417TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
418 rtc::scoped_refptr<AudioTrackInterface> track =
419 AudioTrack::Create(kAudioTrackId, nullptr);
420 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
421 rtc::scoped_refptr<AudioRtpSender> sender =
422 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
423 sender->SetSsrc(kAudioSsrc);
424
425 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
426 EXPECT_TRUE(sender->SetTrack(nullptr));
427
428 // Make sure it's SetTrack that called methods on the provider, and not the
429 // destructor.
430 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
431}
432
433TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
nisseaf510af2016-03-21 08:20:42 -0700434 AddVideoTrack();
deadbeeffac06552015-11-25 11:26:01 -0800435 EXPECT_CALL(video_provider_,
436 SetCaptureDevice(kVideoSsrc,
437 video_track_->GetSource()->GetVideoCapturer()));
438 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
439 rtc::scoped_refptr<VideoRtpSender> sender =
440 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
441 sender->SetSsrc(kVideoSsrc);
442
443 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
444 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
445 EXPECT_TRUE(sender->SetTrack(nullptr));
446
447 // Make sure it's SetTrack that called methods on the provider, and not the
448 // destructor.
449 EXPECT_CALL(video_provider_, SetCaptureDevice(_, _)).Times(0);
450 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _)).Times(0);
451}
452
453TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
nisseaf510af2016-03-21 08:20:42 -0700454 AddVideoTrack();
deadbeeffac06552015-11-25 11:26:01 -0800455 rtc::scoped_refptr<AudioTrackInterface> track =
456 AudioTrack::Create(kAudioTrackId, nullptr);
457 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
458 rtc::scoped_refptr<AudioRtpSender> sender =
459 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
460 sender->SetSsrc(kAudioSsrc);
461
462 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
463 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, true, _, _)).Times(1);
464 sender->SetSsrc(kAudioSsrc2);
465
466 // Calls expected from destructor.
467 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, false, _, _)).Times(1);
468}
469
470TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
nisseaf510af2016-03-21 08:20:42 -0700471 AddVideoTrack();
deadbeeffac06552015-11-25 11:26:01 -0800472 EXPECT_CALL(video_provider_,
473 SetCaptureDevice(kVideoSsrc,
474 video_track_->GetSource()->GetVideoCapturer()));
475 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
476 rtc::scoped_refptr<VideoRtpSender> sender =
477 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
478 sender->SetSsrc(kVideoSsrc);
479
480 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
481 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
482 EXPECT_CALL(video_provider_,
483 SetCaptureDevice(kVideoSsrc2,
484 video_track_->GetSource()->GetVideoCapturer()));
485 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, true, _));
486 sender->SetSsrc(kVideoSsrc2);
487
488 // Calls expected from destructor.
489 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc2, nullptr)).Times(1);
490 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _)).Times(1);
491}
492
skvladdc1c62c2016-03-16 19:07:43 -0700493TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
494 CreateAudioRtpSender();
495
496 EXPECT_CALL(audio_provider_, GetAudioRtpParameters(kAudioSsrc))
497 .WillOnce(Return(RtpParameters()));
498 EXPECT_CALL(audio_provider_, SetAudioRtpParameters(kAudioSsrc, _))
499 .WillOnce(Return(true));
500 RtpParameters params = audio_rtp_sender_->GetParameters();
501 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
502
503 DestroyAudioRtpSender();
504}
505
506TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
507 CreateVideoRtpSender();
508
509 EXPECT_CALL(video_provider_, GetVideoRtpParameters(kVideoSsrc))
510 .WillOnce(Return(RtpParameters()));
511 EXPECT_CALL(video_provider_, SetVideoRtpParameters(kVideoSsrc, _))
512 .WillOnce(Return(true));
513 RtpParameters params = video_rtp_sender_->GetParameters();
514 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
515
516 DestroyVideoRtpSender();
517}
518
deadbeef70ab1a12015-09-28 16:53:55 -0700519} // namespace webrtc