OLD | NEW |
---|---|
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 |
OLD | NEW |