Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(387)

Unified Diff: webrtc/api/rtpsenderreceiver_unittest.cc

Issue 2046173002: Use VoiceChannel/VideoChannel directly from RtpSender/RtpReceiver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Moving code that needs to execute out of RTC_DCHECKs. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/rtpsender.cc ('k') | webrtc/api/webrtcsession.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/rtpsenderreceiver_unittest.cc
diff --git a/webrtc/api/rtpsenderreceiver_unittest.cc b/webrtc/api/rtpsenderreceiver_unittest.cc
index a08e1b4c634a34083e01b451fd8080560504d30b..8c91e148bef38daff9050d1d266baf803ca22469 100644
--- a/webrtc/api/rtpsenderreceiver_unittest.cc
+++ b/webrtc/api/rtpsenderreceiver_unittest.cc
@@ -15,6 +15,8 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webrtc/api/audiotrack.h"
+#include "webrtc/api/fakemediacontroller.h"
+#include "webrtc/api/localaudiosource.h"
#include "webrtc/api/mediastream.h"
#include "webrtc/api/remoteaudiosource.h"
#include "webrtc/api/rtpreceiver.h"
@@ -25,6 +27,10 @@
#include "webrtc/api/videotrack.h"
#include "webrtc/base/gunit.h"
#include "webrtc/media/base/mediachannel.h"
+#include "webrtc/media/base/fakemediaengine.h"
+#include "webrtc/media/engine/fakewebrtccall.h"
+#include "webrtc/p2p/base/faketransportcontroller.h"
+#include "webrtc/pc/channelmanager.h"
using ::testing::_;
using ::testing::Exactly;
@@ -41,70 +47,57 @@ static const uint32_t kAudioSsrc2 = 101;
namespace webrtc {
-// Helper class to test RtpSender/RtpReceiver.
-class MockAudioProvider : public AudioProviderInterface {
- public:
- // TODO(nisse): Valid overrides commented out, because the gmock
- // methods don't use any override declarations, and we want to avoid
- // warnings from -Winconsistent-missing-override. See
- // http://crbug.com/428099.
- ~MockAudioProvider() /* override */ {}
-
- MOCK_METHOD2(SetAudioPlayout,
- void(uint32_t ssrc,
- bool enable));
- MOCK_METHOD4(SetAudioSend,
- void(uint32_t ssrc,
- bool enable,
- const cricket::AudioOptions& options,
- cricket::AudioSource* source));
- MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume));
- MOCK_CONST_METHOD1(GetAudioRtpSendParameters, RtpParameters(uint32_t ssrc));
- MOCK_METHOD2(SetAudioRtpSendParameters,
- bool(uint32_t ssrc, const RtpParameters&));
- MOCK_CONST_METHOD1(GetAudioRtpReceiveParameters,
- RtpParameters(uint32_t ssrc));
- MOCK_METHOD2(SetAudioRtpReceiveParameters,
- bool(uint32_t ssrc, const RtpParameters&));
-
- void SetRawAudioSink(
- uint32_t, std::unique_ptr<AudioSinkInterface> sink) /* override */ {
- sink_ = std::move(sink);
- }
-
- private:
- std::unique_ptr<AudioSinkInterface> sink_;
-};
-
-// Helper class to test RtpSender/RtpReceiver.
-class MockVideoProvider : public VideoProviderInterface {
- public:
- virtual ~MockVideoProvider() {}
- MOCK_METHOD3(SetVideoPlayout,
- void(uint32_t ssrc,
- bool enable,
- rtc::VideoSinkInterface<cricket::VideoFrame>* sink));
- MOCK_METHOD4(SetVideoSend,
- void(uint32_t ssrc,
- bool enable,
- const cricket::VideoOptions* options,
- rtc::VideoSourceInterface<cricket::VideoFrame>* source));
-
- MOCK_CONST_METHOD1(GetVideoRtpSendParameters, RtpParameters(uint32_t ssrc));
- MOCK_METHOD2(SetVideoRtpSendParameters,
- bool(uint32_t ssrc, const RtpParameters&));
- MOCK_CONST_METHOD1(GetVideoRtpReceiveParameters,
- RtpParameters(uint32_t ssrc));
- MOCK_METHOD2(SetVideoRtpReceiveParameters,
- bool(uint32_t ssrc, const RtpParameters&));
-};
-
class RtpSenderReceiverTest : public testing::Test {
public:
- virtual void SetUp() {
- stream_ = MediaStream::Create(kStreamLabel1);
+ RtpSenderReceiverTest()
+ : // Create fake media engine/etc. so we can create channels to use to
+ // test RtpSenders/RtpReceivers.
+ media_engine_(new cricket::FakeMediaEngine()),
+ channel_manager_(media_engine_,
+ rtc::Thread::Current(),
+ rtc::Thread::Current()),
+ fake_call_(webrtc::Call::Config()),
+ fake_media_controller_(&channel_manager_, &fake_call_),
+ stream_(MediaStream::Create(kStreamLabel1)) {
+ // Create channels to be used by the RtpSenders and RtpReceivers.
+ channel_manager_.Init();
+ voice_channel_ = channel_manager_.CreateVoiceChannel(
+ &fake_media_controller_, &fake_transport_controller_, cricket::CN_AUDIO,
+ nullptr, false, cricket::AudioOptions());
+ video_channel_ = channel_manager_.CreateVideoChannel(
+ &fake_media_controller_, &fake_transport_controller_, cricket::CN_VIDEO,
+ nullptr, false, cricket::VideoOptions());
+ voice_media_channel_ = media_engine_->GetVoiceChannel(0);
+ video_media_channel_ = media_engine_->GetVideoChannel(0);
+ RTC_CHECK(voice_channel_);
+ RTC_CHECK(video_channel_);
+ RTC_CHECK(voice_media_channel_);
+ RTC_CHECK(video_media_channel_);
+
+ // Create streams for predefined SSRCs. Streams need to exist in order
+ // for the senders and receievers to apply parameters to them.
+ // Normally these would be created by SetLocalDescription and
+ // SetRemoteDescription.
+ voice_media_channel_->AddSendStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc));
+ voice_media_channel_->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc));
+ voice_media_channel_->AddSendStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc2));
+ voice_media_channel_->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc2));
+ video_media_channel_->AddSendStream(
+ cricket::StreamParams::CreateLegacy(kVideoSsrc));
+ video_media_channel_->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kVideoSsrc));
+ video_media_channel_->AddSendStream(
+ cricket::StreamParams::CreateLegacy(kVideoSsrc2));
+ video_media_channel_->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kVideoSsrc2));
}
+ void TearDown() override { channel_manager_.Terminate(); }
+
void AddVideoTrack() {
rtc::scoped_refptr<VideoTrackSourceInterface> source(
FakeVideoTrackSource::Create());
@@ -112,68 +105,128 @@ class RtpSenderReceiverTest : public testing::Test {
EXPECT_TRUE(stream_->AddTrack(video_track_));
}
- void CreateAudioRtpSender() {
- audio_track_ = AudioTrack::Create(kAudioTrackId, NULL);
+ void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
+
+ void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
+ audio_track_ = AudioTrack::Create(kAudioTrackId, source);
EXPECT_TRUE(stream_->AddTrack(audio_track_));
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
audio_rtp_sender_ =
new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
- &audio_provider_, nullptr);
+ voice_channel_, nullptr);
audio_rtp_sender_->SetSsrc(kAudioSsrc);
+ VerifyVoiceChannelInput();
}
void CreateVideoRtpSender() {
AddVideoTrack();
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
- stream_->label(), &video_provider_);
+ stream_->label(), video_channel_);
video_rtp_sender_->SetSsrc(kVideoSsrc);
+ VerifyVideoChannelInput();
}
void DestroyAudioRtpSender() {
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _))
- .Times(1);
audio_rtp_sender_ = nullptr;
+ VerifyVoiceChannelNoInput();
}
void DestroyVideoRtpSender() {
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
- .Times(1);
video_rtp_sender_ = nullptr;
+ VerifyVideoChannelNoInput();
}
void CreateAudioRtpReceiver() {
audio_track_ = AudioTrack::Create(
kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
EXPECT_TRUE(stream_->AddTrack(audio_track_));
- EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
- kAudioSsrc, &audio_provider_);
+ kAudioSsrc, voice_channel_);
audio_track_ = audio_rtp_receiver_->audio_track();
+ VerifyVoiceChannelOutput();
}
void CreateVideoRtpReceiver() {
- EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, true, _));
video_rtp_receiver_ =
new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
- kVideoSsrc, &video_provider_);
+ kVideoSsrc, video_channel_);
video_track_ = video_rtp_receiver_->video_track();
+ VerifyVideoChannelOutput();
}
void DestroyAudioRtpReceiver() {
- EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
audio_rtp_receiver_ = nullptr;
+ VerifyVoiceChannelNoOutput();
}
void DestroyVideoRtpReceiver() {
- EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, false, NULL));
video_rtp_receiver_ = nullptr;
+ VerifyVideoChannelNoOutput();
+ }
+
+ void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
+
+ void VerifyVoiceChannelInput(uint32_t ssrc) {
+ // Verify that the media channel has an audio source, and the stream isn't
+ // muted.
+ EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
+ EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
+ }
+
+ void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
+
+ void VerifyVideoChannelInput(uint32_t ssrc) {
+ // Verify that the media channel has a video source,
+ EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
+ }
+
+ void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
+
+ void VerifyVoiceChannelNoInput(uint32_t ssrc) {
+ // Verify that the media channel's source is reset.
+ EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
+ }
+
+ void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
+
+ void VerifyVideoChannelNoInput(uint32_t ssrc) {
+ // Verify that the media channel's source is reset.
+ EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
+ }
+
+ void VerifyVoiceChannelOutput() {
+ // Verify that the volume is initialized to 1.
+ double volume;
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(1, volume);
+ }
+
+ void VerifyVideoChannelOutput() {
+ // Verify that the media channel has a sink.
+ EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
+ }
+
+ void VerifyVoiceChannelNoOutput() {
+ // Verify that the volume is reset to 0.
+ double volume;
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(0, volume);
+ }
+
+ void VerifyVideoChannelNoOutput() {
+ // Verify that the media channel's sink is reset.
+ EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
}
protected:
- MockAudioProvider audio_provider_;
- MockVideoProvider video_provider_;
+ cricket::FakeMediaEngine* media_engine_;
+ cricket::FakeTransportController fake_transport_controller_;
+ cricket::ChannelManager channel_manager_;
+ cricket::FakeCall fake_call_;
+ cricket::FakeMediaController fake_media_controller_;
+ cricket::VoiceChannel* voice_channel_;
+ cricket::VideoChannel* video_channel_;
+ cricket::FakeVoiceMediaChannel* voice_media_channel_;
+ cricket::FakeVideoMediaChannel* video_media_channel_;
rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
@@ -183,72 +236,96 @@ class RtpSenderReceiverTest : public testing::Test {
rtc::scoped_refptr<AudioTrackInterface> audio_track_;
};
-// Test that |audio_provider_| is notified when an audio track is associated
+// Test that |voice_channel_| is updated when an audio track is associated
// and disassociated with an AudioRtpSender.
TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
CreateAudioRtpSender();
DestroyAudioRtpSender();
}
-// Test that |video_provider_| is notified when a video track is associated and
+// Test that |video_channel_| is updated when a video track is associated and
// disassociated with a VideoRtpSender.
TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
CreateVideoRtpSender();
DestroyVideoRtpSender();
}
-// Test that |audio_provider_| is notified when a remote audio and track is
+// Test that |voice_channel_| is updated when a remote audio track is
// associated and disassociated with an AudioRtpReceiver.
TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
CreateAudioRtpReceiver();
DestroyAudioRtpReceiver();
}
-// Test that |video_provider_| is notified when a remote
-// video track is associated and disassociated with a VideoRtpReceiver.
+// Test that |video_channel_| is updated when a remote video track is
+// associated and disassociated with a VideoRtpReceiver.
TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
CreateVideoRtpReceiver();
DestroyVideoRtpReceiver();
}
+// Test that the AudioRtpSender applies options from the local audio source.
+TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
+ cricket::AudioOptions options;
+ options.echo_cancellation = rtc::Optional<bool>(true);
+ auto source = LocalAudioSource::Create(
+ PeerConnectionFactoryInterface::Options(), &options);
+ CreateAudioRtpSender(source.get());
+
+ EXPECT_EQ(rtc::Optional<bool>(true),
+ voice_media_channel_->options().echo_cancellation);
+
+ DestroyAudioRtpSender();
+}
+
+// Test that the stream is muted when the track is disabled, and unmuted when
+// the track is enabled.
TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
CreateAudioRtpSender();
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _));
audio_track_->set_enabled(false);
+ EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
audio_track_->set_enabled(true);
+ EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
DestroyAudioRtpSender();
}
+// Test that the volume is set to 0 when the track is disabled, and back to
+// 1 when the track is enabled.
TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
CreateAudioRtpReceiver();
- EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
+ double volume;
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(1, volume);
+
audio_track_->set_enabled(false);
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(0, volume);
- EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
audio_track_->set_enabled(true);
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(1, volume);
DestroyAudioRtpReceiver();
}
+// Currently no action is taken when a remote video track is disabled or
+// enabled, so there's nothing to test here, other than what is normally
+// verified in DestroyVideoRtpSender.
TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
CreateVideoRtpSender();
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, false, _, video_track_.get()));
video_track_->set_enabled(false);
-
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
video_track_->set_enabled(true);
DestroyVideoRtpSender();
}
+// Test that the state of the video track created by the VideoRtpReceiver is
+// updated when the receiver is destroyed.
TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
CreateVideoRtpReceiver();
@@ -263,282 +340,268 @@ TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
video_track_->GetSource()->state());
}
+// Currently no action is taken when a remote video track is disabled or
+// enabled, so there's nothing to test here, other than what is normally
+// verified in DestroyVideoRtpReceiver.
TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
CreateVideoRtpReceiver();
video_track_->set_enabled(false);
-
video_track_->set_enabled(true);
DestroyVideoRtpReceiver();
}
+// Test that the AudioRtpReceiver applies volume changes from the track source
+// to the media channel.
TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
CreateAudioRtpReceiver();
- double volume = 0.5;
- EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, volume));
- audio_track_->GetSource()->SetVolume(volume);
+ double volume;
+ audio_track_->GetSource()->SetVolume(0.5);
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(0.5, volume);
// Disable the audio track, this should prevent setting the volume.
- EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
audio_track_->set_enabled(false);
- audio_track_->GetSource()->SetVolume(1.0);
+ audio_track_->GetSource()->SetVolume(0.8);
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(0, volume);
- EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
+ // When the track is enabled, the previously set volume should take effect.
audio_track_->set_enabled(true);
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(0.8, volume);
- double new_volume = 0.8;
- EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, new_volume));
- audio_track_->GetSource()->SetVolume(new_volume);
+ // Try changing volume one more time.
+ audio_track_->GetSource()->SetVolume(0.9);
+ EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
+ EXPECT_EQ(0.9, volume);
DestroyAudioRtpReceiver();
}
-// Test that provider methods aren't called without both a track and an SSRC.
+// Test that the media channel isn't enabled for sending if the audio sender
+// doesn't have both a track and SSRC.
TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
- rtc::scoped_refptr<AudioRtpSender> sender =
- new AudioRtpSender(&audio_provider_, nullptr);
+ audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
rtc::scoped_refptr<AudioTrackInterface> track =
AudioTrack::Create(kAudioTrackId, nullptr);
- EXPECT_TRUE(sender->SetTrack(track));
- EXPECT_TRUE(sender->SetTrack(nullptr));
- sender->SetSsrc(kAudioSsrc);
- sender->SetSsrc(0);
- // Just let it get destroyed and make sure it doesn't call any methods on the
- // provider interface.
+
+ // Track but no SSRC.
+ EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
+ VerifyVoiceChannelNoInput();
+
+ // SSRC but no track.
+ EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
+ audio_rtp_sender_->SetSsrc(kAudioSsrc);
+ VerifyVoiceChannelNoInput();
}
-// Test that provider methods aren't called without both a track and an SSRC.
+// Test that the media channel isn't enabled for sending if the video sender
+// doesn't have both a track and SSRC.
TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
- rtc::scoped_refptr<VideoRtpSender> sender =
- new VideoRtpSender(&video_provider_);
- EXPECT_TRUE(sender->SetTrack(video_track_));
- EXPECT_TRUE(sender->SetTrack(nullptr));
- sender->SetSsrc(kVideoSsrc);
- sender->SetSsrc(0);
- // Just let it get destroyed and make sure it doesn't call any methods on the
- // provider interface.
+ video_rtp_sender_ = new VideoRtpSender(video_channel_);
+
+ // Track but no SSRC.
+ EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
+ VerifyVideoChannelNoInput();
+
+ // SSRC but no track.
+ EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
+ video_rtp_sender_->SetSsrc(kVideoSsrc);
+ VerifyVideoChannelNoInput();
}
-// Test that an audio sender calls the expected methods on the provider once
-// it has a track and SSRC, when the SSRC is set first.
+// Test that the media channel is enabled for sending when the audio sender
+// has a track and SSRC, when the SSRC is set first.
TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
- rtc::scoped_refptr<AudioRtpSender> sender =
- new AudioRtpSender(&audio_provider_, nullptr);
+ audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
rtc::scoped_refptr<AudioTrackInterface> track =
AudioTrack::Create(kAudioTrackId, nullptr);
- sender->SetSsrc(kAudioSsrc);
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
- sender->SetTrack(track);
+ audio_rtp_sender_->SetSsrc(kAudioSsrc);
+ audio_rtp_sender_->SetTrack(track);
+ VerifyVoiceChannelInput();
- // Calls expected from destructor.
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
+ DestroyAudioRtpSender();
}
-// Test that an audio sender calls the expected methods on the provider once
-// it has a track and SSRC, when the SSRC is set last.
+// Test that the media channel is enabled for sending when the audio sender
+// has a track and SSRC, when the SSRC is set last.
TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
- rtc::scoped_refptr<AudioRtpSender> sender =
- new AudioRtpSender(&audio_provider_, nullptr);
+ audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
rtc::scoped_refptr<AudioTrackInterface> track =
AudioTrack::Create(kAudioTrackId, nullptr);
- sender->SetTrack(track);
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
- sender->SetSsrc(kAudioSsrc);
+ audio_rtp_sender_->SetTrack(track);
+ audio_rtp_sender_->SetSsrc(kAudioSsrc);
+ VerifyVoiceChannelInput();
- // Calls expected from destructor.
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
+ DestroyAudioRtpSender();
}
-// Test that a video sender calls the expected methods on the provider once
-// it has a track and SSRC, when the SSRC is set first.
+// Test that the media channel is enabled for sending when the video sender
+// has a track and SSRC, when the SSRC is set first.
TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
AddVideoTrack();
- rtc::scoped_refptr<VideoRtpSender> sender =
- new VideoRtpSender(&video_provider_);
- sender->SetSsrc(kVideoSsrc);
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
- sender->SetTrack(video_track_);
-
- // Calls expected from destructor.
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
- .Times(1);
+ video_rtp_sender_ = new VideoRtpSender(video_channel_);
+ video_rtp_sender_->SetSsrc(kVideoSsrc);
+ video_rtp_sender_->SetTrack(video_track_);
+ VerifyVideoChannelInput();
+
+ DestroyVideoRtpSender();
}
-// Test that a video sender calls the expected methods on the provider once
-// it has a track and SSRC, when the SSRC is set last.
+// Test that the media channel is enabled for sending when the video sender
+// has a track and SSRC, when the SSRC is set last.
TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
AddVideoTrack();
- rtc::scoped_refptr<VideoRtpSender> sender =
- new VideoRtpSender(&video_provider_);
- sender->SetTrack(video_track_);
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
- sender->SetSsrc(kVideoSsrc);
-
- // Calls expected from destructor.
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
- .Times(1);
+ video_rtp_sender_ = new VideoRtpSender(video_channel_);
+ video_rtp_sender_->SetTrack(video_track_);
+ video_rtp_sender_->SetSsrc(kVideoSsrc);
+ VerifyVideoChannelInput();
+
+ DestroyVideoRtpSender();
}
-// Test that the sender is disconnected from the provider when its SSRC is
-// set to 0.
+// Test that the media channel stops sending when the audio sender's SSRC is set
+// to 0.
TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
- rtc::scoped_refptr<AudioTrackInterface> track =
- AudioTrack::Create(kAudioTrackId, nullptr);
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
- rtc::scoped_refptr<AudioRtpSender> sender =
- new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
- sender->SetSsrc(kAudioSsrc);
-
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
- sender->SetSsrc(0);
+ CreateAudioRtpSender();
- // Make sure it's SetSsrc that called methods on the provider, and not the
- // destructor.
- EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
+ audio_rtp_sender_->SetSsrc(0);
+ VerifyVoiceChannelNoInput();
}
-// Test that the sender is disconnected from the provider when its SSRC is
-// set to 0.
+// Test that the media channel stops sending when the video sender's SSRC is set
+// to 0.
TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
- AddVideoTrack();
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
- rtc::scoped_refptr<VideoRtpSender> sender =
- new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
- sender->SetSsrc(kVideoSsrc);
-
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
- .Times(1);
- sender->SetSsrc(0);
-
- // Make sure it's SetSsrc that called methods on the provider, and not the
- // destructor.
- EXPECT_CALL(video_provider_, SetVideoSend(_, _, _, _)).Times(0);
+ CreateAudioRtpSender();
+
+ audio_rtp_sender_->SetSsrc(0);
+ VerifyVideoChannelNoInput();
}
+// Test that the media channel stops sending when the audio sender's track is
+// set to null.
TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
- rtc::scoped_refptr<AudioTrackInterface> track =
- AudioTrack::Create(kAudioTrackId, nullptr);
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
- rtc::scoped_refptr<AudioRtpSender> sender =
- new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
- sender->SetSsrc(kAudioSsrc);
-
- // Expect that SetAudioSend will be called before the reference to the track
- // is released.
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, nullptr))
- .Times(1)
- .WillOnce(InvokeWithoutArgs([&track] {
- EXPECT_LT(2, track->AddRef());
- track->Release();
- }));
- EXPECT_TRUE(sender->SetTrack(nullptr));
-
- // Make sure it's SetTrack that called methods on the provider, and not the
- // destructor.
- EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
+ CreateAudioRtpSender();
+
+ EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
+ VerifyVoiceChannelNoInput();
}
+// Test that the media channel stops sending when the video sender's track is
+// set to null.
TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
- rtc::scoped_refptr<VideoTrackSourceInterface> source(
- FakeVideoTrackSource::Create());
- rtc::scoped_refptr<VideoTrackInterface> track =
- VideoTrack::Create(kVideoTrackId, source);
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _, track.get()));
- rtc::scoped_refptr<VideoRtpSender> sender =
- new VideoRtpSender(track, kStreamLabel1, &video_provider_);
- sender->SetSsrc(kVideoSsrc);
-
- // Expect that SetVideoSend will be called before the reference to the track
- // is released.
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
- .Times(1)
- .WillOnce(InvokeWithoutArgs([&track] {
- EXPECT_LT(2, track->AddRef());
- track->Release();
- }));
- EXPECT_TRUE(sender->SetTrack(nullptr));
-
- // Make sure it's SetTrack that called methods on the provider, and not the
- // destructor.
- EXPECT_CALL(video_provider_, SetVideoSend(_, _, _, _)).Times(0);
+ CreateVideoRtpSender();
+
+ video_rtp_sender_->SetSsrc(0);
+ VerifyVideoChannelNoInput();
}
+// Test that when the audio sender's SSRC is changed, the media channel stops
+// sending with the old SSRC and starts sending with the new one.
TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
- AddVideoTrack();
- rtc::scoped_refptr<AudioTrackInterface> track =
- AudioTrack::Create(kAudioTrackId, nullptr);
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
- rtc::scoped_refptr<AudioRtpSender> sender =
- new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr);
- sender->SetSsrc(kAudioSsrc);
+ CreateAudioRtpSender();
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1);
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, true, _, _)).Times(1);
- sender->SetSsrc(kAudioSsrc2);
+ audio_rtp_sender_->SetSsrc(kAudioSsrc2);
+ VerifyVoiceChannelNoInput(kAudioSsrc);
+ VerifyVoiceChannelInput(kAudioSsrc2);
- // Calls expected from destructor.
- EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, false, _, _)).Times(1);
+ audio_rtp_sender_ = nullptr;
+ VerifyVoiceChannelNoInput(kAudioSsrc2);
}
+// Test that when the audio sender's SSRC is changed, the media channel stops
+// sending with the old SSRC and starts sending with the new one.
TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
- AddVideoTrack();
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
- rtc::scoped_refptr<VideoRtpSender> sender =
- new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_);
- sender->SetSsrc(kVideoSsrc);
-
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
- .Times(1);
- EXPECT_CALL(video_provider_,
- SetVideoSend(kVideoSsrc2, true, _, video_track_.get()))
- .Times(1);
- sender->SetSsrc(kVideoSsrc2);
-
- // Calls expected from destructor.
- EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _, nullptr))
- .Times(1);
+ CreateVideoRtpSender();
+
+ video_rtp_sender_->SetSsrc(kVideoSsrc2);
+ VerifyVideoChannelNoInput(kVideoSsrc);
+ VerifyVideoChannelInput(kVideoSsrc2);
+
+ video_rtp_sender_ = nullptr;
+ VerifyVideoChannelNoInput(kVideoSsrc2);
}
TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
CreateAudioRtpSender();
- EXPECT_CALL(audio_provider_, GetAudioRtpSendParameters(kAudioSsrc))
- .WillOnce(Return(RtpParameters()));
- EXPECT_CALL(audio_provider_, SetAudioRtpSendParameters(kAudioSsrc, _))
- .WillOnce(Return(true));
RtpParameters params = audio_rtp_sender_->GetParameters();
+ EXPECT_EQ(1u, params.encodings.size());
EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
DestroyAudioRtpSender();
}
+TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
+ CreateAudioRtpSender();
+
+ EXPECT_EQ(-1, voice_media_channel_->max_bps());
+ webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
+ EXPECT_EQ(1, params.encodings.size());
+ EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
+ params.encodings[0].max_bitrate_bps = 1000;
+ EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
+
+ // Read back the parameters and verify they have been changed.
+ params = audio_rtp_sender_->GetParameters();
+ EXPECT_EQ(1, params.encodings.size());
+ EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
+
+ // Verify that the audio channel received the new parameters.
+ params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
+ EXPECT_EQ(1, params.encodings.size());
+ EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
+
+ // Verify that the global bitrate limit has not been changed.
+ EXPECT_EQ(-1, voice_media_channel_->max_bps());
+
+ DestroyAudioRtpSender();
+}
+
TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
CreateVideoRtpSender();
- EXPECT_CALL(video_provider_, GetVideoRtpSendParameters(kVideoSsrc))
- .WillOnce(Return(RtpParameters()));
- EXPECT_CALL(video_provider_, SetVideoRtpSendParameters(kVideoSsrc, _))
- .WillOnce(Return(true));
RtpParameters params = video_rtp_sender_->GetParameters();
+ EXPECT_EQ(1u, params.encodings.size());
EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
DestroyVideoRtpSender();
}
+TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
+ CreateVideoRtpSender();
+
+ EXPECT_EQ(-1, video_media_channel_->max_bps());
+ webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
+ EXPECT_EQ(1, params.encodings.size());
+ EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
+ params.encodings[0].max_bitrate_bps = 1000;
+ EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
+
+ // Read back the parameters and verify they have been changed.
+ params = video_rtp_sender_->GetParameters();
+ EXPECT_EQ(1, params.encodings.size());
+ EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
+
+ // Verify that the video channel received the new parameters.
+ params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
+ EXPECT_EQ(1, params.encodings.size());
+ EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
+
+ // Verify that the global bitrate limit has not been changed.
+ EXPECT_EQ(-1, video_media_channel_->max_bps());
+
+ DestroyVideoRtpSender();
+}
+
TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
CreateAudioRtpReceiver();
- EXPECT_CALL(audio_provider_, GetAudioRtpReceiveParameters(kAudioSsrc))
- .WillOnce(Return(RtpParameters()));
- EXPECT_CALL(audio_provider_, SetAudioRtpReceiveParameters(kAudioSsrc, _))
- .WillOnce(Return(true));
RtpParameters params = audio_rtp_receiver_->GetParameters();
+ EXPECT_EQ(1u, params.encodings.size());
EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
DestroyAudioRtpReceiver();
@@ -547,11 +610,8 @@ TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
CreateVideoRtpReceiver();
- EXPECT_CALL(video_provider_, GetVideoRtpReceiveParameters(kVideoSsrc))
- .WillOnce(Return(RtpParameters()));
- EXPECT_CALL(video_provider_, SetVideoRtpReceiveParameters(kVideoSsrc, _))
- .WillOnce(Return(true));
RtpParameters params = video_rtp_receiver_->GetParameters();
+ EXPECT_EQ(1u, params.encodings.size());
EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
DestroyVideoRtpReceiver();
« no previous file with comments | « webrtc/api/rtpsender.cc ('k') | webrtc/api/webrtcsession.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698