blob: 5dc97c64ea155854bb7a520b96113a32edfdea14 [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"
perkja3ede6c2016-03-08 01:27:48 +010022#include "webrtc/api/videocapturertracksource.h"
Henrik Kjellander15583c12016-02-10 10:53:12 +010023#include "webrtc/api/videotrack.h"
deadbeef70ab1a12015-09-28 16:53:55 -070024#include "webrtc/base/gunit.h"
kjellandera96e2d72016-02-04 23:52:28 -080025#include "webrtc/media/base/fakevideocapturer.h"
26#include "webrtc/media/base/mediachannel.h"
deadbeef70ab1a12015-09-28 16:53:55 -070027
28using ::testing::_;
29using ::testing::Exactly;
30
31static const char kStreamLabel1[] = "local_stream_1";
32static const char kVideoTrackId[] = "video_1";
33static const char kAudioTrackId[] = "audio_1";
Peter Boström0c4e06b2015-10-07 12:23:21 +020034static const uint32_t kVideoSsrc = 98;
deadbeeffac06552015-11-25 11:26:01 -080035static const uint32_t kVideoSsrc2 = 100;
Peter Boström0c4e06b2015-10-07 12:23:21 +020036static const uint32_t kAudioSsrc = 99;
deadbeeffac06552015-11-25 11:26:01 -080037static const uint32_t kAudioSsrc2 = 101;
deadbeef70ab1a12015-09-28 16:53:55 -070038
39namespace webrtc {
40
41// Helper class to test RtpSender/RtpReceiver.
42class MockAudioProvider : public AudioProviderInterface {
43 public:
Tommif888bb52015-12-12 01:37:01 +010044 ~MockAudioProvider() override {}
45
solenbergd4cec0d2015-10-09 08:55:48 -070046 MOCK_METHOD2(SetAudioPlayout,
Peter Boström0c4e06b2015-10-07 12:23:21 +020047 void(uint32_t ssrc,
solenbergd4cec0d2015-10-09 08:55:48 -070048 bool enable));
deadbeef70ab1a12015-09-28 16:53:55 -070049 MOCK_METHOD4(SetAudioSend,
Peter Boström0c4e06b2015-10-07 12:23:21 +020050 void(uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070051 bool enable,
52 const cricket::AudioOptions& options,
53 cricket::AudioRenderer* renderer));
Peter Boström0c4e06b2015-10-07 12:23:21 +020054 MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume));
Tommif888bb52015-12-12 01:37:01 +010055
deadbeef2d110be2016-01-13 12:00:26 -080056 void SetRawAudioSink(uint32_t,
57 rtc::scoped_ptr<AudioSinkInterface> sink) override {
58 sink_ = std::move(sink);
Tommif888bb52015-12-12 01:37:01 +010059 }
60
61 private:
deadbeef2d110be2016-01-13 12:00:26 -080062 rtc::scoped_ptr<AudioSinkInterface> sink_;
deadbeef70ab1a12015-09-28 16:53:55 -070063};
64
65// Helper class to test RtpSender/RtpReceiver.
66class MockVideoProvider : public VideoProviderInterface {
67 public:
68 virtual ~MockVideoProvider() {}
69 MOCK_METHOD2(SetCaptureDevice,
Peter Boström0c4e06b2015-10-07 12:23:21 +020070 bool(uint32_t ssrc, cricket::VideoCapturer* camera));
deadbeef70ab1a12015-09-28 16:53:55 -070071 MOCK_METHOD3(SetVideoPlayout,
Peter Boström0c4e06b2015-10-07 12:23:21 +020072 void(uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070073 bool enable,
nisse08582ff2016-02-04 01:24:52 -080074 rtc::VideoSinkInterface<cricket::VideoFrame>* sink));
deadbeef70ab1a12015-09-28 16:53:55 -070075 MOCK_METHOD3(SetVideoSend,
Peter Boström0c4e06b2015-10-07 12:23:21 +020076 void(uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070077 bool enable,
78 const cricket::VideoOptions* options));
79};
80
perkja3ede6c2016-03-08 01:27:48 +010081class FakeVideoSource : public Notifier<VideoTrackSourceInterface> {
deadbeef70ab1a12015-09-28 16:53:55 -070082 public:
tommi6eca7e32015-12-15 04:27:11 -080083 static rtc::scoped_refptr<FakeVideoSource> Create(bool remote) {
84 return new rtc::RefCountedObject<FakeVideoSource>(remote);
deadbeef70ab1a12015-09-28 16:53:55 -070085 }
perkjf2880a02016-03-03 01:51:52 -080086 cricket::VideoCapturer* GetVideoCapturer() { return &fake_capturer_; }
87 void Stop() override {}
88 void Restart() override {}
89 void AddOrUpdateSink(
90 rtc::VideoSinkInterface<cricket::VideoFrame>* sink,
91 const rtc::VideoSinkWants& wants) override {}
92 void RemoveSink(
93 rtc::VideoSinkInterface<cricket::VideoFrame>* output) override {}
94 SourceState state() const override { return state_; }
95 bool remote() const override { return remote_; }
96 const cricket::VideoOptions* options() const override { return &options_; }
deadbeef70ab1a12015-09-28 16:53:55 -070097
98 protected:
tommi6eca7e32015-12-15 04:27:11 -080099 explicit FakeVideoSource(bool remote) : state_(kLive), remote_(remote) {}
deadbeef70ab1a12015-09-28 16:53:55 -0700100 ~FakeVideoSource() {}
101
102 private:
103 cricket::FakeVideoCapturer fake_capturer_;
104 SourceState state_;
tommi6eca7e32015-12-15 04:27:11 -0800105 bool remote_;
deadbeef70ab1a12015-09-28 16:53:55 -0700106 cricket::VideoOptions options_;
107};
108
109class RtpSenderReceiverTest : public testing::Test {
110 public:
111 virtual void SetUp() {
112 stream_ = MediaStream::Create(kStreamLabel1);
tommi6eca7e32015-12-15 04:27:11 -0800113 }
114
115 void AddVideoTrack(bool remote) {
perkja3ede6c2016-03-08 01:27:48 +0100116 rtc::scoped_refptr<VideoTrackSourceInterface> source(
tommi6eca7e32015-12-15 04:27:11 -0800117 FakeVideoSource::Create(remote));
deadbeef70ab1a12015-09-28 16:53:55 -0700118 video_track_ = VideoTrack::Create(kVideoTrackId, source);
119 EXPECT_TRUE(stream_->AddTrack(video_track_));
120 }
121
122 void CreateAudioRtpSender() {
123 audio_track_ = AudioTrack::Create(kAudioTrackId, NULL);
124 EXPECT_TRUE(stream_->AddTrack(audio_track_));
125 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
deadbeeffac06552015-11-25 11:26:01 -0800126 audio_rtp_sender_ =
127 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
128 &audio_provider_, nullptr);
129 audio_rtp_sender_->SetSsrc(kAudioSsrc);
deadbeef70ab1a12015-09-28 16:53:55 -0700130 }
131
132 void CreateVideoRtpSender() {
tommi6eca7e32015-12-15 04:27:11 -0800133 AddVideoTrack(false);
deadbeef70ab1a12015-09-28 16:53:55 -0700134 EXPECT_CALL(video_provider_,
135 SetCaptureDevice(
136 kVideoSsrc, video_track_->GetSource()->GetVideoCapturer()));
137 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
138 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
deadbeeffac06552015-11-25 11:26:01 -0800139 stream_->label(), &video_provider_);
140 video_rtp_sender_->SetSsrc(kVideoSsrc);
deadbeef70ab1a12015-09-28 16:53:55 -0700141 }
142
143 void DestroyAudioRtpSender() {
144 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _))
145 .Times(1);
146 audio_rtp_sender_ = nullptr;
147 }
148
149 void DestroyVideoRtpSender() {
150 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, NULL)).Times(1);
151 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
152 video_rtp_sender_ = nullptr;
153 }
154
155 void CreateAudioRtpReceiver() {
tommi6eca7e32015-12-15 04:27:11 -0800156 audio_track_ = AudioTrack::Create(
Tommif888bb52015-12-12 01:37:01 +0100157 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
deadbeef70ab1a12015-09-28 16:53:55 -0700158 EXPECT_TRUE(stream_->AddTrack(audio_track_));
solenbergd4cec0d2015-10-09 08:55:48 -0700159 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
deadbeef70ab1a12015-09-28 16:53:55 -0700160 audio_rtp_receiver_ = new AudioRtpReceiver(stream_->GetAudioTracks()[0],
161 kAudioSsrc, &audio_provider_);
162 }
163
164 void CreateVideoRtpReceiver() {
tommi6eca7e32015-12-15 04:27:11 -0800165 AddVideoTrack(true);
deadbeef70ab1a12015-09-28 16:53:55 -0700166 EXPECT_CALL(video_provider_,
167 SetVideoPlayout(kVideoSsrc, true,
nisse8e8908a2016-02-05 01:52:15 -0800168 video_track_->GetSink()));
deadbeef70ab1a12015-09-28 16:53:55 -0700169 video_rtp_receiver_ = new VideoRtpReceiver(stream_->GetVideoTracks()[0],
170 kVideoSsrc, &video_provider_);
171 }
172
173 void DestroyAudioRtpReceiver() {
solenbergd4cec0d2015-10-09 08:55:48 -0700174 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
deadbeef70ab1a12015-09-28 16:53:55 -0700175 audio_rtp_receiver_ = nullptr;
176 }
177
178 void DestroyVideoRtpReceiver() {
179 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, false, NULL));
180 video_rtp_receiver_ = nullptr;
181 }
182
183 protected:
184 MockAudioProvider audio_provider_;
185 MockVideoProvider video_provider_;
186 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
187 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
188 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
189 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
190 rtc::scoped_refptr<MediaStreamInterface> stream_;
191 rtc::scoped_refptr<VideoTrackInterface> video_track_;
192 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
193};
194
195// Test that |audio_provider_| is notified when an audio track is associated
196// and disassociated with an AudioRtpSender.
197TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
198 CreateAudioRtpSender();
199 DestroyAudioRtpSender();
200}
201
202// Test that |video_provider_| is notified when a video track is associated and
203// disassociated with a VideoRtpSender.
204TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
205 CreateVideoRtpSender();
206 DestroyVideoRtpSender();
207}
208
209// Test that |audio_provider_| is notified when a remote audio and track is
210// associated and disassociated with an AudioRtpReceiver.
211TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
212 CreateAudioRtpReceiver();
213 DestroyAudioRtpReceiver();
214}
215
216// Test that |video_provider_| is notified when a remote
217// video track is associated and disassociated with a VideoRtpReceiver.
218TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
219 CreateVideoRtpReceiver();
220 DestroyVideoRtpReceiver();
221}
222
223TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
224 CreateAudioRtpSender();
225
226 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _));
227 audio_track_->set_enabled(false);
228
229 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
230 audio_track_->set_enabled(true);
231
232 DestroyAudioRtpSender();
233}
234
235TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
236 CreateAudioRtpReceiver();
237
solenbergd4cec0d2015-10-09 08:55:48 -0700238 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
deadbeef70ab1a12015-09-28 16:53:55 -0700239 audio_track_->set_enabled(false);
240
solenbergd4cec0d2015-10-09 08:55:48 -0700241 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
deadbeef70ab1a12015-09-28 16:53:55 -0700242 audio_track_->set_enabled(true);
243
244 DestroyAudioRtpReceiver();
245}
246
247TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
248 CreateVideoRtpSender();
249
250 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _));
251 video_track_->set_enabled(false);
252
253 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
254 video_track_->set_enabled(true);
255
256 DestroyVideoRtpSender();
257}
258
259TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
260 CreateVideoRtpReceiver();
261
262 video_track_->set_enabled(false);
263
264 video_track_->set_enabled(true);
265
266 DestroyVideoRtpReceiver();
267}
268
269TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
270 CreateAudioRtpReceiver();
271
272 double volume = 0.5;
273 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, volume));
274 audio_track_->GetSource()->SetVolume(volume);
275
276 // Disable the audio track, this should prevent setting the volume.
solenbergd4cec0d2015-10-09 08:55:48 -0700277 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
deadbeef70ab1a12015-09-28 16:53:55 -0700278 audio_track_->set_enabled(false);
279 audio_track_->GetSource()->SetVolume(1.0);
280
solenbergd4cec0d2015-10-09 08:55:48 -0700281 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
deadbeef70ab1a12015-09-28 16:53:55 -0700282 audio_track_->set_enabled(true);
283
284 double new_volume = 0.8;
285 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, new_volume));
286 audio_track_->GetSource()->SetVolume(new_volume);
287
288 DestroyAudioRtpReceiver();
289}
290
deadbeeffac06552015-11-25 11:26:01 -0800291// Test that provider methods aren't called without both a track and an SSRC.
292TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
293 rtc::scoped_refptr<AudioRtpSender> sender =
294 new AudioRtpSender(&audio_provider_, nullptr);
295 rtc::scoped_refptr<AudioTrackInterface> track =
296 AudioTrack::Create(kAudioTrackId, nullptr);
297 EXPECT_TRUE(sender->SetTrack(track));
298 EXPECT_TRUE(sender->SetTrack(nullptr));
299 sender->SetSsrc(kAudioSsrc);
300 sender->SetSsrc(0);
301 // Just let it get destroyed and make sure it doesn't call any methods on the
302 // provider interface.
303}
304
305// Test that provider methods aren't called without both a track and an SSRC.
306TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
307 rtc::scoped_refptr<VideoRtpSender> sender =
308 new VideoRtpSender(&video_provider_);
309 EXPECT_TRUE(sender->SetTrack(video_track_));
310 EXPECT_TRUE(sender->SetTrack(nullptr));
311 sender->SetSsrc(kVideoSsrc);
312 sender->SetSsrc(0);
313 // Just let it get destroyed and make sure it doesn't call any methods on the
314 // provider interface.
315}
316
317// Test that an audio sender calls the expected methods on the provider once
318// it has a track and SSRC, when the SSRC is set first.
319TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
320 rtc::scoped_refptr<AudioRtpSender> sender =
321 new AudioRtpSender(&audio_provider_, nullptr);
322 rtc::scoped_refptr<AudioTrackInterface> track =
323 AudioTrack::Create(kAudioTrackId, nullptr);
324 sender->SetSsrc(kAudioSsrc);
325 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
326 sender->SetTrack(track);
327
328 // Calls expected from destructor.
329 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
330}
331
332// Test that an audio sender calls the expected methods on the provider once
333// it has a track and SSRC, when the SSRC is set last.
334TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
335 rtc::scoped_refptr<AudioRtpSender> sender =
336 new AudioRtpSender(&audio_provider_, nullptr);
337 rtc::scoped_refptr<AudioTrackInterface> track =
338 AudioTrack::Create(kAudioTrackId, nullptr);
339 sender->SetTrack(track);
340 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
341 sender->SetSsrc(kAudioSsrc);
342
343 // Calls expected from destructor.
344 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
345}
346
347// Test that a video sender calls the expected methods on the provider once
348// it has a track and SSRC, when the SSRC is set first.
349TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
tommi6eca7e32015-12-15 04:27:11 -0800350 AddVideoTrack(false);
deadbeeffac06552015-11-25 11:26:01 -0800351 rtc::scoped_refptr<VideoRtpSender> sender =
352 new VideoRtpSender(&video_provider_);
353 sender->SetSsrc(kVideoSsrc);
354 EXPECT_CALL(video_provider_,
355 SetCaptureDevice(kVideoSsrc,
356 video_track_->GetSource()->GetVideoCapturer()));
357 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
358 sender->SetTrack(video_track_);
359
360 // Calls expected from destructor.
361 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
362 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
363}
364
365// Test that a video sender calls the expected methods on the provider once
366// it has a track and SSRC, when the SSRC is set last.
367TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
tommi6eca7e32015-12-15 04:27:11 -0800368 AddVideoTrack(false);
deadbeeffac06552015-11-25 11:26:01 -0800369 rtc::scoped_refptr<VideoRtpSender> sender =
370 new VideoRtpSender(&video_provider_);
371 sender->SetTrack(video_track_);
372 EXPECT_CALL(video_provider_,
373 SetCaptureDevice(kVideoSsrc,
374 video_track_->GetSource()->GetVideoCapturer()));
375 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
376 sender->SetSsrc(kVideoSsrc);
377
378 // Calls expected from destructor.
379 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
380 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
381}
382
383// Test that the sender is disconnected from the provider when its SSRC is
384// set to 0.
385TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
386 rtc::scoped_refptr<AudioTrackInterface> track =
387 AudioTrack::Create(kAudioTrackId, nullptr);
388 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
389 rtc::scoped_refptr<AudioRtpSender> sender =
390 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
391 sender->SetSsrc(kAudioSsrc);
392
393 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
394 sender->SetSsrc(0);
395
396 // Make sure it's SetSsrc that called methods on the provider, and not the
397 // destructor.
398 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
399}
400
401// Test that the sender is disconnected from the provider when its SSRC is
402// set to 0.
403TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
tommi6eca7e32015-12-15 04:27:11 -0800404 AddVideoTrack(false);
deadbeeffac06552015-11-25 11:26:01 -0800405 EXPECT_CALL(video_provider_,
406 SetCaptureDevice(kVideoSsrc,
407 video_track_->GetSource()->GetVideoCapturer()));
408 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
409 rtc::scoped_refptr<VideoRtpSender> sender =
410 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
411 sender->SetSsrc(kVideoSsrc);
412
413 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
414 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
415 sender->SetSsrc(0);
416
417 // Make sure it's SetSsrc that called methods on the provider, and not the
418 // destructor.
419 EXPECT_CALL(video_provider_, SetCaptureDevice(_, _)).Times(0);
420 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _)).Times(0);
421}
422
423TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
424 rtc::scoped_refptr<AudioTrackInterface> track =
425 AudioTrack::Create(kAudioTrackId, nullptr);
426 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
427 rtc::scoped_refptr<AudioRtpSender> sender =
428 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
429 sender->SetSsrc(kAudioSsrc);
430
431 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
432 EXPECT_TRUE(sender->SetTrack(nullptr));
433
434 // Make sure it's SetTrack that called methods on the provider, and not the
435 // destructor.
436 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
437}
438
439TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
tommi6eca7e32015-12-15 04:27:11 -0800440 AddVideoTrack(false);
deadbeeffac06552015-11-25 11:26:01 -0800441 EXPECT_CALL(video_provider_,
442 SetCaptureDevice(kVideoSsrc,
443 video_track_->GetSource()->GetVideoCapturer()));
444 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
445 rtc::scoped_refptr<VideoRtpSender> sender =
446 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
447 sender->SetSsrc(kVideoSsrc);
448
449 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
450 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
451 EXPECT_TRUE(sender->SetTrack(nullptr));
452
453 // Make sure it's SetTrack that called methods on the provider, and not the
454 // destructor.
455 EXPECT_CALL(video_provider_, SetCaptureDevice(_, _)).Times(0);
456 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _)).Times(0);
457}
458
459TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
tommi6eca7e32015-12-15 04:27:11 -0800460 AddVideoTrack(false);
deadbeeffac06552015-11-25 11:26:01 -0800461 rtc::scoped_refptr<AudioTrackInterface> track =
462 AudioTrack::Create(kAudioTrackId, nullptr);
463 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
464 rtc::scoped_refptr<AudioRtpSender> sender =
465 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
466 sender->SetSsrc(kAudioSsrc);
467
468 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
469 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, true, _, _)).Times(1);
470 sender->SetSsrc(kAudioSsrc2);
471
472 // Calls expected from destructor.
473 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, false, _, _)).Times(1);
474}
475
476TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
tommi6eca7e32015-12-15 04:27:11 -0800477 AddVideoTrack(false);
deadbeeffac06552015-11-25 11:26:01 -0800478 EXPECT_CALL(video_provider_,
479 SetCaptureDevice(kVideoSsrc,
480 video_track_->GetSource()->GetVideoCapturer()));
481 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _));
482 rtc::scoped_refptr<VideoRtpSender> sender =
483 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
484 sender->SetSsrc(kVideoSsrc);
485
486 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, nullptr)).Times(1);
487 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1);
488 EXPECT_CALL(video_provider_,
489 SetCaptureDevice(kVideoSsrc2,
490 video_track_->GetSource()->GetVideoCapturer()));
491 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, true, _));
492 sender->SetSsrc(kVideoSsrc2);
493
494 // Calls expected from destructor.
495 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc2, nullptr)).Times(1);
496 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _)).Times(1);
497}
498
deadbeef70ab1a12015-09-28 16:53:55 -0700499} // namespace webrtc