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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include <memory> 11 #include <memory>
12 #include <string> 12 #include <string>
13 #include <utility> 13 #include <utility>
14 14
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webrtc/api/audiotrack.h" 17 #include "webrtc/api/audiotrack.h"
18 #include "webrtc/api/fakemediacontroller.h"
19 #include "webrtc/api/localaudiosource.h"
18 #include "webrtc/api/mediastream.h" 20 #include "webrtc/api/mediastream.h"
19 #include "webrtc/api/remoteaudiosource.h" 21 #include "webrtc/api/remoteaudiosource.h"
20 #include "webrtc/api/rtpreceiver.h" 22 #include "webrtc/api/rtpreceiver.h"
21 #include "webrtc/api/rtpsender.h" 23 #include "webrtc/api/rtpsender.h"
22 #include "webrtc/api/streamcollection.h" 24 #include "webrtc/api/streamcollection.h"
23 #include "webrtc/api/test/fakevideotracksource.h" 25 #include "webrtc/api/test/fakevideotracksource.h"
24 #include "webrtc/api/videotracksource.h" 26 #include "webrtc/api/videotracksource.h"
25 #include "webrtc/api/videotrack.h" 27 #include "webrtc/api/videotrack.h"
26 #include "webrtc/base/gunit.h" 28 #include "webrtc/base/gunit.h"
27 #include "webrtc/media/base/mediachannel.h" 29 #include "webrtc/media/base/mediachannel.h"
30 #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"
28 34
29 using ::testing::_; 35 using ::testing::_;
30 using ::testing::Exactly; 36 using ::testing::Exactly;
31 using ::testing::InvokeWithoutArgs; 37 using ::testing::InvokeWithoutArgs;
32 using ::testing::Return; 38 using ::testing::Return;
33 39
34 static const char kStreamLabel1[] = "local_stream_1"; 40 static const char kStreamLabel1[] = "local_stream_1";
35 static const char kVideoTrackId[] = "video_1"; 41 static const char kVideoTrackId[] = "video_1";
36 static const char kAudioTrackId[] = "audio_1"; 42 static const char kAudioTrackId[] = "audio_1";
37 static const uint32_t kVideoSsrc = 98; 43 static const uint32_t kVideoSsrc = 98;
38 static const uint32_t kVideoSsrc2 = 100; 44 static const uint32_t kVideoSsrc2 = 100;
39 static const uint32_t kAudioSsrc = 99; 45 static const uint32_t kAudioSsrc = 99;
40 static const uint32_t kAudioSsrc2 = 101; 46 static const uint32_t kAudioSsrc2 = 101;
41 47
42 namespace webrtc { 48 namespace webrtc {
43 49
44 // Helper class to test RtpSender/RtpReceiver. 50 class RtpSenderReceiverTest : public testing::Test {
45 class MockAudioProvider : public AudioProviderInterface {
46 public: 51 public:
47 // TODO(nisse): Valid overrides commented out, because the gmock 52 RtpSenderReceiverTest()
48 // methods don't use any override declarations, and we want to avoid 53 : // Create fake media engine/etc. so we can create channels to use to
49 // warnings from -Winconsistent-missing-override. See 54 // test
50 // http://crbug.com/428099. 55 // RtpSenders/RtpReceivers.
51 ~MockAudioProvider() /* override */ {} 56 media_engine_(new cricket::FakeMediaEngine()),
57 channel_manager_(media_engine_,
58 rtc::Thread::Current(),
59 rtc::Thread::Current()),
60 fake_call_(webrtc::Call::Config()),
61 fake_media_controller_(&channel_manager_, &fake_call_),
62 stream_(MediaStream::Create(kStreamLabel1)) {
63 // Create channels to be used by the RtpSenders and RtpReceivers.
64 channel_manager_.Init();
65 voice_channel_ = channel_manager_.CreateVoiceChannel(
66 &fake_media_controller_, &fake_transport_controller_, cricket::CN_AUDIO,
67 nullptr, false, cricket::AudioOptions());
68 video_channel_ = channel_manager_.CreateVideoChannel(
69 &fake_media_controller_, &fake_transport_controller_, cricket::CN_VIDEO,
70 nullptr, false, cricket::VideoOptions());
71 voice_media_channel_ = media_engine_->GetVoiceChannel(0);
72 video_media_channel_ = media_engine_->GetVideoChannel(0);
73 RTC_CHECK(voice_channel_);
74 RTC_CHECK(video_channel_);
75 RTC_CHECK(voice_media_channel_);
76 RTC_CHECK(video_media_channel_);
52 77
53 MOCK_METHOD2(SetAudioPlayout, 78 // Create streams for predefined SSRCs. Streams need to exist in order
54 void(uint32_t ssrc, 79 // for the senders and receievers to apply parameters to them.
55 bool enable)); 80 // Normally these would be created by SetLocalDescription and
56 MOCK_METHOD4(SetAudioSend, 81 // SetRemoteDescription.
57 void(uint32_t ssrc, 82 voice_media_channel_->AddSendStream(
58 bool enable, 83 cricket::StreamParams::CreateLegacy(kAudioSsrc));
59 const cricket::AudioOptions& options, 84 voice_media_channel_->AddRecvStream(
60 cricket::AudioSource* source)); 85 cricket::StreamParams::CreateLegacy(kAudioSsrc));
61 MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume)); 86 voice_media_channel_->AddSendStream(
62 MOCK_CONST_METHOD1(GetAudioRtpSendParameters, RtpParameters(uint32_t ssrc)); 87 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
63 MOCK_METHOD2(SetAudioRtpSendParameters, 88 voice_media_channel_->AddRecvStream(
64 bool(uint32_t ssrc, const RtpParameters&)); 89 cricket::StreamParams::CreateLegacy(kAudioSsrc2));
65 MOCK_CONST_METHOD1(GetAudioRtpReceiveParameters, 90 video_media_channel_->AddSendStream(
66 RtpParameters(uint32_t ssrc)); 91 cricket::StreamParams::CreateLegacy(kVideoSsrc));
67 MOCK_METHOD2(SetAudioRtpReceiveParameters, 92 video_media_channel_->AddRecvStream(
68 bool(uint32_t ssrc, const RtpParameters&)); 93 cricket::StreamParams::CreateLegacy(kVideoSsrc));
69 94 video_media_channel_->AddSendStream(
70 void SetRawAudioSink( 95 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
71 uint32_t, std::unique_ptr<AudioSinkInterface> sink) /* override */ { 96 video_media_channel_->AddRecvStream(
72 sink_ = std::move(sink); 97 cricket::StreamParams::CreateLegacy(kVideoSsrc2));
73 } 98 }
74 99
75 private: 100 void TearDown() override { channel_manager_.Terminate(); }
76 std::unique_ptr<AudioSinkInterface> sink_;
77 };
78
79 // Helper class to test RtpSender/RtpReceiver.
80 class MockVideoProvider : public VideoProviderInterface {
81 public:
82 virtual ~MockVideoProvider() {}
83 MOCK_METHOD3(SetVideoPlayout,
84 void(uint32_t ssrc,
85 bool enable,
86 rtc::VideoSinkInterface<cricket::VideoFrame>* sink));
87 MOCK_METHOD4(SetVideoSend,
88 void(uint32_t ssrc,
89 bool enable,
90 const cricket::VideoOptions* options,
91 rtc::VideoSourceInterface<cricket::VideoFrame>* source));
92
93 MOCK_CONST_METHOD1(GetVideoRtpSendParameters, RtpParameters(uint32_t ssrc));
94 MOCK_METHOD2(SetVideoRtpSendParameters,
95 bool(uint32_t ssrc, const RtpParameters&));
96 MOCK_CONST_METHOD1(GetVideoRtpReceiveParameters,
97 RtpParameters(uint32_t ssrc));
98 MOCK_METHOD2(SetVideoRtpReceiveParameters,
99 bool(uint32_t ssrc, const RtpParameters&));
100 };
101
102 class RtpSenderReceiverTest : public testing::Test {
103 public:
104 virtual void SetUp() {
105 stream_ = MediaStream::Create(kStreamLabel1);
106 }
107 101
108 void AddVideoTrack() { 102 void AddVideoTrack() {
109 rtc::scoped_refptr<VideoTrackSourceInterface> source( 103 rtc::scoped_refptr<VideoTrackSourceInterface> source(
110 FakeVideoTrackSource::Create()); 104 FakeVideoTrackSource::Create());
111 video_track_ = VideoTrack::Create(kVideoTrackId, source); 105 video_track_ = VideoTrack::Create(kVideoTrackId, source);
112 EXPECT_TRUE(stream_->AddTrack(video_track_)); 106 EXPECT_TRUE(stream_->AddTrack(video_track_));
113 } 107 }
114 108
115 void CreateAudioRtpSender() { 109 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); }
116 audio_track_ = AudioTrack::Create(kAudioTrackId, NULL); 110
111 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) {
112 audio_track_ = AudioTrack::Create(kAudioTrackId, source);
117 EXPECT_TRUE(stream_->AddTrack(audio_track_)); 113 EXPECT_TRUE(stream_->AddTrack(audio_track_));
118 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
119 audio_rtp_sender_ = 114 audio_rtp_sender_ =
120 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(), 115 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
121 &audio_provider_, nullptr); 116 voice_channel_, nullptr);
122 audio_rtp_sender_->SetSsrc(kAudioSsrc); 117 audio_rtp_sender_->SetSsrc(kAudioSsrc);
118 VerifyVoiceChannelInput();
123 } 119 }
124 120
125 void CreateVideoRtpSender() { 121 void CreateVideoRtpSender() {
126 AddVideoTrack(); 122 AddVideoTrack();
127 EXPECT_CALL(video_provider_,
128 SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
129 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0], 123 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0],
130 stream_->label(), &video_provider_); 124 stream_->label(), video_channel_);
131 video_rtp_sender_->SetSsrc(kVideoSsrc); 125 video_rtp_sender_->SetSsrc(kVideoSsrc);
126 VerifyVideoChannelInput();
132 } 127 }
133 128
134 void DestroyAudioRtpSender() { 129 void DestroyAudioRtpSender() {
135 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _))
136 .Times(1);
137 audio_rtp_sender_ = nullptr; 130 audio_rtp_sender_ = nullptr;
131 VerifyVoiceChannelNoInput();
138 } 132 }
139 133
140 void DestroyVideoRtpSender() { 134 void DestroyVideoRtpSender() {
141 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
142 .Times(1);
143 video_rtp_sender_ = nullptr; 135 video_rtp_sender_ = nullptr;
136 VerifyVideoChannelNoInput();
144 } 137 }
145 138
146 void CreateAudioRtpReceiver() { 139 void CreateAudioRtpReceiver() {
147 audio_track_ = AudioTrack::Create( 140 audio_track_ = AudioTrack::Create(
148 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL)); 141 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL));
149 EXPECT_TRUE(stream_->AddTrack(audio_track_)); 142 EXPECT_TRUE(stream_->AddTrack(audio_track_));
150 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
151 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId, 143 audio_rtp_receiver_ = new AudioRtpReceiver(stream_, kAudioTrackId,
152 kAudioSsrc, &audio_provider_); 144 kAudioSsrc, voice_channel_);
153 audio_track_ = audio_rtp_receiver_->audio_track(); 145 audio_track_ = audio_rtp_receiver_->audio_track();
146 VerifyVoiceChannelOutput();
154 } 147 }
155 148
156 void CreateVideoRtpReceiver() { 149 void CreateVideoRtpReceiver() {
157 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, true, _));
158 video_rtp_receiver_ = 150 video_rtp_receiver_ =
159 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(), 151 new VideoRtpReceiver(stream_, kVideoTrackId, rtc::Thread::Current(),
160 kVideoSsrc, &video_provider_); 152 kVideoSsrc, video_channel_);
161 video_track_ = video_rtp_receiver_->video_track(); 153 video_track_ = video_rtp_receiver_->video_track();
154 VerifyVideoChannelOutput();
162 } 155 }
163 156
164 void DestroyAudioRtpReceiver() { 157 void DestroyAudioRtpReceiver() {
165 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
166 audio_rtp_receiver_ = nullptr; 158 audio_rtp_receiver_ = nullptr;
159 VerifyVoiceChannelNoOutput();
167 } 160 }
168 161
169 void DestroyVideoRtpReceiver() { 162 void DestroyVideoRtpReceiver() {
170 EXPECT_CALL(video_provider_, SetVideoPlayout(kVideoSsrc, false, NULL));
171 video_rtp_receiver_ = nullptr; 163 video_rtp_receiver_ = nullptr;
164 VerifyVideoChannelNoOutput();
165 }
166
167 void VerifyVoiceChannelInput() { VerifyVoiceChannelInput(kAudioSsrc); }
168
169 void VerifyVoiceChannelInput(uint32_t ssrc) {
170 // Verify that the media channel has an audio source, and the stream isn't
171 // muted.
172 EXPECT_TRUE(voice_media_channel_->HasSource(ssrc));
173 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(ssrc));
174 }
175
176 void VerifyVideoChannelInput() { VerifyVideoChannelInput(kVideoSsrc); }
177
178 void VerifyVideoChannelInput(uint32_t ssrc) {
179 // Verify that the media channel has a video source,
180 EXPECT_TRUE(video_media_channel_->HasSource(ssrc));
181 }
182
183 void VerifyVoiceChannelNoInput() { VerifyVoiceChannelNoInput(kAudioSsrc); }
184
185 void VerifyVoiceChannelNoInput(uint32_t ssrc) {
186 // Verify that the media channel's source is reset.
187 EXPECT_FALSE(voice_media_channel_->HasSource(ssrc));
188 }
189
190 void VerifyVideoChannelNoInput() { VerifyVideoChannelNoInput(kVideoSsrc); }
191
192 void VerifyVideoChannelNoInput(uint32_t ssrc) {
193 // Verify that the media channel's source is reset.
194 EXPECT_FALSE(video_media_channel_->HasSource(ssrc));
195 }
196
197 void VerifyVoiceChannelOutput() {
198 // Verify that the volume is initialized to 1.
199 double volume;
200 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
201 EXPECT_EQ(1, volume);
202 }
203
204 void VerifyVideoChannelOutput() {
205 // Verify that the media channel has a sink.
206 EXPECT_TRUE(video_media_channel_->HasSink(kVideoSsrc));
207 }
208
209 void VerifyVoiceChannelNoOutput() {
210 // Verify that the volume is reset to 0.
211 double volume;
212 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
213 EXPECT_EQ(0, volume);
214 }
215
216 void VerifyVideoChannelNoOutput() {
217 // Verify that the media channel's sink is reset.
218 EXPECT_FALSE(video_media_channel_->HasSink(kVideoSsrc));
172 } 219 }
173 220
174 protected: 221 protected:
175 MockAudioProvider audio_provider_; 222 cricket::FakeMediaEngine* media_engine_;
176 MockVideoProvider video_provider_; 223 cricket::FakeTransportController fake_transport_controller_;
224 cricket::ChannelManager channel_manager_;
225 cricket::FakeCall fake_call_;
226 cricket::FakeMediaController fake_media_controller_;
227 cricket::VoiceChannel* voice_channel_;
228 cricket::VideoChannel* video_channel_;
229 cricket::FakeVoiceMediaChannel* voice_media_channel_;
230 cricket::FakeVideoMediaChannel* video_media_channel_;
177 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_; 231 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_;
178 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_; 232 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_;
179 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_; 233 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_;
180 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_; 234 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_;
181 rtc::scoped_refptr<MediaStreamInterface> stream_; 235 rtc::scoped_refptr<MediaStreamInterface> stream_;
182 rtc::scoped_refptr<VideoTrackInterface> video_track_; 236 rtc::scoped_refptr<VideoTrackInterface> video_track_;
183 rtc::scoped_refptr<AudioTrackInterface> audio_track_; 237 rtc::scoped_refptr<AudioTrackInterface> audio_track_;
184 }; 238 };
185 239
186 // Test that |audio_provider_| is notified when an audio track is associated 240 // Test that |voice_channel_| is updated when an audio track is associated
187 // and disassociated with an AudioRtpSender. 241 // and disassociated with an AudioRtpSender.
188 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) { 242 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) {
189 CreateAudioRtpSender(); 243 CreateAudioRtpSender();
190 DestroyAudioRtpSender(); 244 DestroyAudioRtpSender();
191 } 245 }
192 246
193 // Test that |video_provider_| is notified when a video track is associated and 247 // Test that |video_channel_| is updated when a video track is associated and
194 // disassociated with a VideoRtpSender. 248 // disassociated with a VideoRtpSender.
195 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) { 249 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpSender) {
196 CreateVideoRtpSender(); 250 CreateVideoRtpSender();
197 DestroyVideoRtpSender(); 251 DestroyVideoRtpSender();
198 } 252 }
199 253
200 // Test that |audio_provider_| is notified when a remote audio and track is 254 // Test that |voice_channel_| is updated when a remote audio track is
201 // associated and disassociated with an AudioRtpReceiver. 255 // associated and disassociated with an AudioRtpReceiver.
202 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) { 256 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpReceiver) {
203 CreateAudioRtpReceiver(); 257 CreateAudioRtpReceiver();
204 DestroyAudioRtpReceiver(); 258 DestroyAudioRtpReceiver();
205 } 259 }
206 260
207 // Test that |video_provider_| is notified when a remote 261 // Test that |video_channel_| is updated when a remote video track is
208 // video track is associated and disassociated with a VideoRtpReceiver. 262 // associated and disassociated with a VideoRtpReceiver.
209 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) { 263 TEST_F(RtpSenderReceiverTest, AddAndDestroyVideoRtpReceiver) {
210 CreateVideoRtpReceiver(); 264 CreateVideoRtpReceiver();
211 DestroyVideoRtpReceiver(); 265 DestroyVideoRtpReceiver();
212 } 266 }
213 267
214 TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) { 268 // Test that the AudioRtpSender applies options from the local audio source.
215 CreateAudioRtpSender(); 269 TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) {
270 cricket::AudioOptions options;
271 options.echo_cancellation = rtc::Optional<bool>(true);
272 auto source = LocalAudioSource::Create(
273 PeerConnectionFactoryInterface::Options(), &options);
274 CreateAudioRtpSender(source.get());
216 275
217 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)); 276 EXPECT_EQ(rtc::Optional<bool>(true),
218 audio_track_->set_enabled(false); 277 voice_media_channel_->options().echo_cancellation);
219
220 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _));
221 audio_track_->set_enabled(true);
222 278
223 DestroyAudioRtpSender(); 279 DestroyAudioRtpSender();
224 } 280 }
225 281
282 // Test that the stream is muted when the track is disabled, and unmuted when
283 // the track is enabled.
284 TEST_F(RtpSenderReceiverTest, LocalAudioTrackDisable) {
285 CreateAudioRtpSender();
286
287 audio_track_->set_enabled(false);
288 EXPECT_TRUE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
289
290 audio_track_->set_enabled(true);
291 EXPECT_FALSE(voice_media_channel_->IsStreamMuted(kAudioSsrc));
292
293 DestroyAudioRtpSender();
294 }
295
296 // Test that the volume is set to 0 when the track is disabled, and back to
297 // 1 when the track is enabled.
226 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) { 298 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackDisable) {
227 CreateAudioRtpReceiver(); 299 CreateAudioRtpReceiver();
228 300
229 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false)); 301 double volume;
302 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
303 EXPECT_EQ(1, volume);
304
230 audio_track_->set_enabled(false); 305 audio_track_->set_enabled(false);
306 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
307 EXPECT_EQ(0, volume);
231 308
232 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true));
233 audio_track_->set_enabled(true); 309 audio_track_->set_enabled(true);
310 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
311 EXPECT_EQ(1, volume);
234 312
235 DestroyAudioRtpReceiver(); 313 DestroyAudioRtpReceiver();
236 } 314 }
237 315
316 // Currently no action is taken when a remote video track is disabled or
317 // enabled, so there's nothing to test here, other than what is normally
318 // verified in DestroyVideoRtpSender.
238 TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) { 319 TEST_F(RtpSenderReceiverTest, LocalVideoTrackDisable) {
239 CreateVideoRtpSender(); 320 CreateVideoRtpSender();
240 321
241 EXPECT_CALL(video_provider_,
242 SetVideoSend(kVideoSsrc, false, _, video_track_.get()));
243 video_track_->set_enabled(false); 322 video_track_->set_enabled(false);
244
245 EXPECT_CALL(video_provider_,
246 SetVideoSend(kVideoSsrc, true, _, video_track_.get()));
247 video_track_->set_enabled(true); 323 video_track_->set_enabled(true);
248 324
249 DestroyVideoRtpSender(); 325 DestroyVideoRtpSender();
250 } 326 }
251 327
328 // Test that the state of the video track created by the VideoRtpReceiver is
329 // updated when the receiver is destroyed.
252 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) { 330 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackState) {
253 CreateVideoRtpReceiver(); 331 CreateVideoRtpReceiver();
254 332
255 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state()); 333 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kLive, video_track_->state());
256 EXPECT_EQ(webrtc::MediaSourceInterface::kLive, 334 EXPECT_EQ(webrtc::MediaSourceInterface::kLive,
257 video_track_->GetSource()->state()); 335 video_track_->GetSource()->state());
258 336
259 DestroyVideoRtpReceiver(); 337 DestroyVideoRtpReceiver();
260 338
261 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state()); 339 EXPECT_EQ(webrtc::MediaStreamTrackInterface::kEnded, video_track_->state());
262 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded, 340 EXPECT_EQ(webrtc::MediaSourceInterface::kEnded,
263 video_track_->GetSource()->state()); 341 video_track_->GetSource()->state());
264 } 342 }
265 343
344 // Currently no action is taken when a remote video track is disabled or
345 // enabled, so there's nothing to test here, other than what is normally
346 // verified in DestroyVideoRtpReceiver.
266 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) { 347 TEST_F(RtpSenderReceiverTest, RemoteVideoTrackDisable) {
267 CreateVideoRtpReceiver(); 348 CreateVideoRtpReceiver();
268 349
269 video_track_->set_enabled(false); 350 video_track_->set_enabled(false);
270
271 video_track_->set_enabled(true); 351 video_track_->set_enabled(true);
272 352
273 DestroyVideoRtpReceiver(); 353 DestroyVideoRtpReceiver();
274 } 354 }
275 355
356 // Test that the AudioRtpReceiver applies volume changes from the track source
357 // to the media channel.
276 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) { 358 TEST_F(RtpSenderReceiverTest, RemoteAudioTrackSetVolume) {
277 CreateAudioRtpReceiver(); 359 CreateAudioRtpReceiver();
278 360
279 double volume = 0.5; 361 double volume;
280 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, volume)); 362 audio_track_->GetSource()->SetVolume(0.5);
281 audio_track_->GetSource()->SetVolume(volume); 363 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
364 EXPECT_EQ(0.5, volume);
282 365
283 // Disable the audio track, this should prevent setting the volume. 366 // Disable the audio track, this should prevent setting the volume.
284 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, false));
285 audio_track_->set_enabled(false); 367 audio_track_->set_enabled(false);
286 audio_track_->GetSource()->SetVolume(1.0); 368 audio_track_->GetSource()->SetVolume(0.8);
287 369 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
288 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true)); 370 EXPECT_EQ(0, volume);
371
372 // When the track is enabled, the previously set volume should take effect.
289 audio_track_->set_enabled(true); 373 audio_track_->set_enabled(true);
290 374 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
291 double new_volume = 0.8; 375 EXPECT_EQ(0.8, volume);
292 EXPECT_CALL(audio_provider_, SetAudioPlayoutVolume(kAudioSsrc, new_volume)); 376
293 audio_track_->GetSource()->SetVolume(new_volume); 377 // Try changing volume one more time.
378 audio_track_->GetSource()->SetVolume(0.9);
379 EXPECT_TRUE(voice_media_channel_->GetOutputVolume(kAudioSsrc, &volume));
380 EXPECT_EQ(0.9, volume);
294 381
295 DestroyAudioRtpReceiver(); 382 DestroyAudioRtpReceiver();
296 } 383 }
297 384
298 // Test that provider methods aren't called without both a track and an SSRC. 385 // Test that the media channel isn't enabled for sending if the audio sender
386 // doesn't have both a track and SSRC.
299 TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) { 387 TEST_F(RtpSenderReceiverTest, AudioSenderWithoutTrackAndSsrc) {
300 rtc::scoped_refptr<AudioRtpSender> sender = 388 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
301 new AudioRtpSender(&audio_provider_, nullptr);
302 rtc::scoped_refptr<AudioTrackInterface> track = 389 rtc::scoped_refptr<AudioTrackInterface> track =
303 AudioTrack::Create(kAudioTrackId, nullptr); 390 AudioTrack::Create(kAudioTrackId, nullptr);
304 EXPECT_TRUE(sender->SetTrack(track)); 391
305 EXPECT_TRUE(sender->SetTrack(nullptr)); 392 // Track but no SSRC.
306 sender->SetSsrc(kAudioSsrc); 393 EXPECT_TRUE(audio_rtp_sender_->SetTrack(track));
307 sender->SetSsrc(0); 394 VerifyVoiceChannelNoInput();
308 // Just let it get destroyed and make sure it doesn't call any methods on the 395
309 // provider interface. 396 // SSRC but no track.
310 } 397 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
311 398 audio_rtp_sender_->SetSsrc(kAudioSsrc);
312 // Test that provider methods aren't called without both a track and an SSRC. 399 VerifyVoiceChannelNoInput();
400 }
401
402 // Test that the media channel isn't enabled for sending if the video sender
403 // doesn't have both a track and SSRC.
313 TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) { 404 TEST_F(RtpSenderReceiverTest, VideoSenderWithoutTrackAndSsrc) {
314 rtc::scoped_refptr<VideoRtpSender> sender = 405 video_rtp_sender_ = new VideoRtpSender(video_channel_);
315 new VideoRtpSender(&video_provider_); 406
316 EXPECT_TRUE(sender->SetTrack(video_track_)); 407 // Track but no SSRC.
317 EXPECT_TRUE(sender->SetTrack(nullptr)); 408 EXPECT_TRUE(video_rtp_sender_->SetTrack(video_track_));
318 sender->SetSsrc(kVideoSsrc); 409 VerifyVideoChannelNoInput();
319 sender->SetSsrc(0); 410
320 // Just let it get destroyed and make sure it doesn't call any methods on the 411 // SSRC but no track.
321 // provider interface. 412 EXPECT_TRUE(video_rtp_sender_->SetTrack(nullptr));
322 } 413 video_rtp_sender_->SetSsrc(kVideoSsrc);
323 414 VerifyVideoChannelNoInput();
324 // Test that an audio sender calls the expected methods on the provider once 415 }
325 // it has a track and SSRC, when the SSRC is set first. 416
417 // Test that the media channel is enabled for sending when the audio sender
418 // has a track and SSRC, when the SSRC is set first.
326 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) { 419 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupSsrcThenTrack) {
327 rtc::scoped_refptr<AudioRtpSender> sender = 420 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
328 new AudioRtpSender(&audio_provider_, nullptr);
329 rtc::scoped_refptr<AudioTrackInterface> track = 421 rtc::scoped_refptr<AudioTrackInterface> track =
330 AudioTrack::Create(kAudioTrackId, nullptr); 422 AudioTrack::Create(kAudioTrackId, nullptr);
331 sender->SetSsrc(kAudioSsrc); 423 audio_rtp_sender_->SetSsrc(kAudioSsrc);
332 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 424 audio_rtp_sender_->SetTrack(track);
333 sender->SetTrack(track); 425 VerifyVoiceChannelInput();
334 426
335 // Calls expected from destructor. 427 DestroyAudioRtpSender();
336 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 428 }
337 } 429
338 430 // Test that the media channel is enabled for sending when the audio sender
339 // Test that an audio sender calls the expected methods on the provider once 431 // has a track and SSRC, when the SSRC is set last.
340 // it has a track and SSRC, when the SSRC is set last.
341 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) { 432 TEST_F(RtpSenderReceiverTest, AudioSenderEarlyWarmupTrackThenSsrc) {
342 rtc::scoped_refptr<AudioRtpSender> sender = 433 audio_rtp_sender_ = new AudioRtpSender(voice_channel_, nullptr);
343 new AudioRtpSender(&audio_provider_, nullptr);
344 rtc::scoped_refptr<AudioTrackInterface> track = 434 rtc::scoped_refptr<AudioTrackInterface> track =
345 AudioTrack::Create(kAudioTrackId, nullptr); 435 AudioTrack::Create(kAudioTrackId, nullptr);
346 sender->SetTrack(track); 436 audio_rtp_sender_->SetTrack(track);
347 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 437 audio_rtp_sender_->SetSsrc(kAudioSsrc);
348 sender->SetSsrc(kAudioSsrc); 438 VerifyVoiceChannelInput();
349 439
350 // Calls expected from destructor. 440 DestroyAudioRtpSender();
351 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 441 }
352 } 442
353 443 // Test that the media channel is enabled for sending when the video sender
354 // Test that a video sender calls the expected methods on the provider once 444 // has a track and SSRC, when the SSRC is set first.
355 // it has a track and SSRC, when the SSRC is set first.
356 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) { 445 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupSsrcThenTrack) {
357 AddVideoTrack(); 446 AddVideoTrack();
358 rtc::scoped_refptr<VideoRtpSender> sender = 447 video_rtp_sender_ = new VideoRtpSender(video_channel_);
359 new VideoRtpSender(&video_provider_); 448 video_rtp_sender_->SetSsrc(kVideoSsrc);
360 sender->SetSsrc(kVideoSsrc); 449 video_rtp_sender_->SetTrack(video_track_);
361 EXPECT_CALL(video_provider_, 450 VerifyVideoChannelInput();
362 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 451
363 sender->SetTrack(video_track_); 452 DestroyVideoRtpSender();
364 453 }
365 // Calls expected from destructor. 454
366 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 455 // Test that the media channel is enabled for sending when the video sender
367 .Times(1); 456 // has a track and SSRC, when the SSRC is set last.
368 }
369
370 // Test that a video sender calls the expected methods on the provider once
371 // it has a track and SSRC, when the SSRC is set last.
372 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) { 457 TEST_F(RtpSenderReceiverTest, VideoSenderEarlyWarmupTrackThenSsrc) {
373 AddVideoTrack(); 458 AddVideoTrack();
374 rtc::scoped_refptr<VideoRtpSender> sender = 459 video_rtp_sender_ = new VideoRtpSender(video_channel_);
375 new VideoRtpSender(&video_provider_); 460 video_rtp_sender_->SetTrack(video_track_);
376 sender->SetTrack(video_track_); 461 video_rtp_sender_->SetSsrc(kVideoSsrc);
377 EXPECT_CALL(video_provider_, 462 VerifyVideoChannelInput();
378 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 463
379 sender->SetSsrc(kVideoSsrc); 464 DestroyVideoRtpSender();
380 465 }
381 // Calls expected from destructor. 466
382 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 467 // Test that the media channel stops sending when the audio sender's SSRC is set
383 .Times(1); 468 // to 0.
384 }
385
386 // Test that the sender is disconnected from the provider when its SSRC is
387 // set to 0.
388 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) { 469 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcSetToZero) {
389 rtc::scoped_refptr<AudioTrackInterface> track = 470 CreateAudioRtpSender();
390 AudioTrack::Create(kAudioTrackId, nullptr); 471
391 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 472 audio_rtp_sender_->SetSsrc(0);
392 rtc::scoped_refptr<AudioRtpSender> sender = 473 VerifyVoiceChannelNoInput();
393 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr); 474 }
394 sender->SetSsrc(kAudioSsrc); 475
395 476 // Test that the media channel stops sending when the video sender's SSRC is set
396 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 477 // to 0.
397 sender->SetSsrc(0);
398
399 // Make sure it's SetSsrc that called methods on the provider, and not the
400 // destructor.
401 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
402 }
403
404 // Test that the sender is disconnected from the provider when its SSRC is
405 // set to 0.
406 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) { 478 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcSetToZero) {
407 AddVideoTrack(); 479 CreateAudioRtpSender();
408 EXPECT_CALL(video_provider_, 480
409 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 481 audio_rtp_sender_->SetSsrc(0);
410 rtc::scoped_refptr<VideoRtpSender> sender = 482 VerifyVideoChannelNoInput();
411 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_); 483 }
412 sender->SetSsrc(kVideoSsrc); 484
413 485 // Test that the media channel stops sending when the audio sender's track is
414 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 486 // set to null.
415 .Times(1);
416 sender->SetSsrc(0);
417
418 // Make sure it's SetSsrc that called methods on the provider, and not the
419 // destructor.
420 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _, _)).Times(0);
421 }
422
423 TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) { 487 TEST_F(RtpSenderReceiverTest, AudioSenderTrackSetToNull) {
424 rtc::scoped_refptr<AudioTrackInterface> track = 488 CreateAudioRtpSender();
425 AudioTrack::Create(kAudioTrackId, nullptr); 489
426 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 490 EXPECT_TRUE(audio_rtp_sender_->SetTrack(nullptr));
427 rtc::scoped_refptr<AudioRtpSender> sender = 491 VerifyVoiceChannelNoInput();
428 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr); 492 }
429 sender->SetSsrc(kAudioSsrc); 493
430 494 // Test that the media channel stops sending when the video sender's track is
431 // Expect that SetAudioSend will be called before the reference to the track 495 // set to null.
432 // is released.
433 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, nullptr))
434 .Times(1)
435 .WillOnce(InvokeWithoutArgs([&track] {
436 EXPECT_LT(2, track->AddRef());
437 track->Release();
438 }));
439 EXPECT_TRUE(sender->SetTrack(nullptr));
440
441 // Make sure it's SetTrack that called methods on the provider, and not the
442 // destructor.
443 EXPECT_CALL(audio_provider_, SetAudioSend(_, _, _, _)).Times(0);
444 }
445
446 TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) { 496 TEST_F(RtpSenderReceiverTest, VideoSenderTrackSetToNull) {
447 rtc::scoped_refptr<VideoTrackSourceInterface> source( 497 CreateVideoRtpSender();
448 FakeVideoTrackSource::Create()); 498
449 rtc::scoped_refptr<VideoTrackInterface> track = 499 video_rtp_sender_->SetSsrc(0);
450 VideoTrack::Create(kVideoTrackId, source); 500 VerifyVideoChannelNoInput();
451 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, true, _, track.get())); 501 }
452 rtc::scoped_refptr<VideoRtpSender> sender = 502
453 new VideoRtpSender(track, kStreamLabel1, &video_provider_); 503 // Test that when the audio sender's SSRC is changed, the media channel stops
454 sender->SetSsrc(kVideoSsrc); 504 // sending with the old SSRC and starts sending with the new one.
455
456 // Expect that SetVideoSend will be called before the reference to the track
457 // is released.
458 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr))
459 .Times(1)
460 .WillOnce(InvokeWithoutArgs([&track] {
461 EXPECT_LT(2, track->AddRef());
462 track->Release();
463 }));
464 EXPECT_TRUE(sender->SetTrack(nullptr));
465
466 // Make sure it's SetTrack that called methods on the provider, and not the
467 // destructor.
468 EXPECT_CALL(video_provider_, SetVideoSend(_, _, _, _)).Times(0);
469 }
470
471 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) { 505 TEST_F(RtpSenderReceiverTest, AudioSenderSsrcChanged) {
472 AddVideoTrack(); 506 CreateAudioRtpSender();
473 rtc::scoped_refptr<AudioTrackInterface> track = 507
474 AudioTrack::Create(kAudioTrackId, nullptr); 508 audio_rtp_sender_->SetSsrc(kAudioSsrc2);
475 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, true, _, _)); 509 VerifyVoiceChannelNoInput(kAudioSsrc);
476 rtc::scoped_refptr<AudioRtpSender> sender = 510 VerifyVoiceChannelInput(kAudioSsrc2);
477 new AudioRtpSender(track, kStreamLabel1, &audio_provider_, nullptr); 511
478 sender->SetSsrc(kAudioSsrc); 512 audio_rtp_sender_ = nullptr;
479 513 VerifyVoiceChannelNoInput(kAudioSsrc2);
480 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc, false, _, _)).Times(1); 514 }
481 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, true, _, _)).Times(1); 515
482 sender->SetSsrc(kAudioSsrc2); 516 // Test that when the audio sender's SSRC is changed, the media channel stops
483 517 // sending with the old SSRC and starts sending with the new one.
484 // Calls expected from destructor.
485 EXPECT_CALL(audio_provider_, SetAudioSend(kAudioSsrc2, false, _, _)).Times(1);
486 }
487
488 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) { 518 TEST_F(RtpSenderReceiverTest, VideoSenderSsrcChanged) {
489 AddVideoTrack(); 519 CreateVideoRtpSender();
490 EXPECT_CALL(video_provider_, 520
491 SetVideoSend(kVideoSsrc, true, _, video_track_.get())); 521 video_rtp_sender_->SetSsrc(kVideoSsrc2);
492 rtc::scoped_refptr<VideoRtpSender> sender = 522 VerifyVideoChannelNoInput(kVideoSsrc);
493 new VideoRtpSender(video_track_, kStreamLabel1, &video_provider_); 523 VerifyVideoChannelInput(kVideoSsrc2);
494 sender->SetSsrc(kVideoSsrc); 524
495 525 video_rtp_sender_ = nullptr;
496 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _, nullptr)) 526 VerifyVideoChannelNoInput(kVideoSsrc2);
497 .Times(1);
498 EXPECT_CALL(video_provider_,
499 SetVideoSend(kVideoSsrc2, true, _, video_track_.get()))
500 .Times(1);
501 sender->SetSsrc(kVideoSsrc2);
502
503 // Calls expected from destructor.
504 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _, nullptr))
505 .Times(1);
506 } 527 }
507 528
508 TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) { 529 TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParameters) {
509 CreateAudioRtpSender(); 530 CreateAudioRtpSender();
510 531
511 EXPECT_CALL(audio_provider_, GetAudioRtpSendParameters(kAudioSsrc))
512 .WillOnce(Return(RtpParameters()));
513 EXPECT_CALL(audio_provider_, SetAudioRtpSendParameters(kAudioSsrc, _))
514 .WillOnce(Return(true));
515 RtpParameters params = audio_rtp_sender_->GetParameters(); 532 RtpParameters params = audio_rtp_sender_->GetParameters();
533 EXPECT_EQ(1u, params.encodings.size());
516 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params)); 534 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
517 535
518 DestroyAudioRtpSender(); 536 DestroyAudioRtpSender();
519 } 537 }
520 538
539 TEST_F(RtpSenderReceiverTest, SetAudioMaxSendBitrate) {
Taylor Brandstetter 2016/06/07 22:44:43 Moved from WebRtcSession tests.
540 CreateAudioRtpSender();
541
542 EXPECT_EQ(-1, voice_media_channel_->max_bps());
543 webrtc::RtpParameters params = audio_rtp_sender_->GetParameters();
544 EXPECT_EQ(1, params.encodings.size());
545 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
546 params.encodings[0].max_bitrate_bps = 1000;
547 EXPECT_TRUE(audio_rtp_sender_->SetParameters(params));
548
549 // Read back the parameters and verify they have been changed.
550 params = audio_rtp_sender_->GetParameters();
551 EXPECT_EQ(1, params.encodings.size());
552 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
553
554 // Verify that the audio channel received the new parameters.
555 params = voice_media_channel_->GetRtpSendParameters(kAudioSsrc);
556 EXPECT_EQ(1, params.encodings.size());
557 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
558
559 // Verify that the global bitrate limit has not been changed.
560 EXPECT_EQ(-1, voice_media_channel_->max_bps());
561
562 DestroyAudioRtpSender();
563 }
564
521 TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) { 565 TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParameters) {
522 CreateVideoRtpSender(); 566 CreateVideoRtpSender();
523 567
524 EXPECT_CALL(video_provider_, GetVideoRtpSendParameters(kVideoSsrc))
525 .WillOnce(Return(RtpParameters()));
526 EXPECT_CALL(video_provider_, SetVideoRtpSendParameters(kVideoSsrc, _))
527 .WillOnce(Return(true));
528 RtpParameters params = video_rtp_sender_->GetParameters(); 568 RtpParameters params = video_rtp_sender_->GetParameters();
569 EXPECT_EQ(1u, params.encodings.size());
529 EXPECT_TRUE(video_rtp_sender_->SetParameters(params)); 570 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
530 571
531 DestroyVideoRtpSender(); 572 DestroyVideoRtpSender();
532 } 573 }
533 574
575 TEST_F(RtpSenderReceiverTest, SetVideoMaxSendBitrate) {
576 CreateVideoRtpSender();
577
578 EXPECT_EQ(-1, video_media_channel_->max_bps());
579 webrtc::RtpParameters params = video_rtp_sender_->GetParameters();
580 EXPECT_EQ(1, params.encodings.size());
581 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps);
582 params.encodings[0].max_bitrate_bps = 1000;
583 EXPECT_TRUE(video_rtp_sender_->SetParameters(params));
584
585 // Read back the parameters and verify they have been changed.
586 params = video_rtp_sender_->GetParameters();
587 EXPECT_EQ(1, params.encodings.size());
588 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
589
590 // Verify that the video channel received the new parameters.
591 params = video_media_channel_->GetRtpSendParameters(kVideoSsrc);
592 EXPECT_EQ(1, params.encodings.size());
593 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps);
594
595 // Verify that the global bitrate limit has not been changed.
596 EXPECT_EQ(-1, video_media_channel_->max_bps());
597
598 DestroyVideoRtpSender();
599 }
600
534 TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) { 601 TEST_F(RtpSenderReceiverTest, AudioReceiverCanSetParameters) {
535 CreateAudioRtpReceiver(); 602 CreateAudioRtpReceiver();
536 603
537 EXPECT_CALL(audio_provider_, GetAudioRtpReceiveParameters(kAudioSsrc))
538 .WillOnce(Return(RtpParameters()));
539 EXPECT_CALL(audio_provider_, SetAudioRtpReceiveParameters(kAudioSsrc, _))
540 .WillOnce(Return(true));
541 RtpParameters params = audio_rtp_receiver_->GetParameters(); 604 RtpParameters params = audio_rtp_receiver_->GetParameters();
605 EXPECT_EQ(1u, params.encodings.size());
542 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params)); 606 EXPECT_TRUE(audio_rtp_receiver_->SetParameters(params));
543 607
544 DestroyAudioRtpReceiver(); 608 DestroyAudioRtpReceiver();
545 } 609 }
546 610
547 TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) { 611 TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
548 CreateVideoRtpReceiver(); 612 CreateVideoRtpReceiver();
549 613
550 EXPECT_CALL(video_provider_, GetVideoRtpReceiveParameters(kVideoSsrc))
551 .WillOnce(Return(RtpParameters()));
552 EXPECT_CALL(video_provider_, SetVideoRtpReceiveParameters(kVideoSsrc, _))
553 .WillOnce(Return(true));
554 RtpParameters params = video_rtp_receiver_->GetParameters(); 614 RtpParameters params = video_rtp_receiver_->GetParameters();
615 EXPECT_EQ(1u, params.encodings.size());
555 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params)); 616 EXPECT_TRUE(video_rtp_receiver_->SetParameters(params));
556 617
557 DestroyVideoRtpReceiver(); 618 DestroyVideoRtpReceiver();
558 } 619 }
559 620
560 } // namespace webrtc 621 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698