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

Side by Side Diff: talk/app/webrtc/peerconnection_unittest.cc

Issue 1393223005: Cleaning up peerconnection_unittest. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 size_t ssrc_pos = 0; 120 size_t ssrc_pos = 0;
121 while ((ssrc_pos = sdp->find(line_start, ssrc_pos)) != 121 while ((ssrc_pos = sdp->find(line_start, ssrc_pos)) !=
122 std::string::npos) { 122 std::string::npos) {
123 size_t end_ssrc = sdp->find(kSdpLineEnd, ssrc_pos); 123 size_t end_ssrc = sdp->find(kSdpLineEnd, ssrc_pos);
124 sdp->erase(ssrc_pos, end_ssrc - ssrc_pos + strlen(kSdpLineEnd)); 124 sdp->erase(ssrc_pos, end_ssrc - ssrc_pos + strlen(kSdpLineEnd));
125 } 125 }
126 } 126 }
127 127
128 class SignalingMessageReceiver { 128 class SignalingMessageReceiver {
129 public: 129 public:
130 protected:
131 SignalingMessageReceiver() {}
132 virtual ~SignalingMessageReceiver() {}
133 };
134
135 class JsepMessageReceiver : public SignalingMessageReceiver {
136 public:
137 virtual void ReceiveSdpMessage(const std::string& type, 130 virtual void ReceiveSdpMessage(const std::string& type,
138 std::string& msg) = 0; 131 std::string& msg) = 0;
139 virtual void ReceiveIceMessage(const std::string& sdp_mid, 132 virtual void ReceiveIceMessage(const std::string& sdp_mid,
140 int sdp_mline_index, 133 int sdp_mline_index,
141 const std::string& msg) = 0; 134 const std::string& msg) = 0;
142 135
143 protected: 136 protected:
144 JsepMessageReceiver() {} 137 SignalingMessageReceiver() {}
145 virtual ~JsepMessageReceiver() {} 138 virtual ~SignalingMessageReceiver() {}
146 }; 139 };
147 140
148 template <typename MessageReceiver> 141 class PeerConnectionTestClient : public webrtc::PeerConnectionObserver,
149 class PeerConnectionTestClientBase 142 public SignalingMessageReceiver {
150 : public webrtc::PeerConnectionObserver,
151 public MessageReceiver {
152 public: 143 public:
153 ~PeerConnectionTestClientBase() { 144 static PeerConnectionTestClient* CreateClient(
145 const std::string& id,
146 const MediaConstraintsInterface* constraints,
147 const PeerConnectionFactory::Options* options) {
148 PeerConnectionTestClient* client(new PeerConnectionTestClient(id));
149 if (!client->Init(constraints, options)) {
150 delete client;
151 return nullptr;
152 }
153 return client;
154 }
155
156 ~PeerConnectionTestClient() {
154 while (!fake_video_renderers_.empty()) { 157 while (!fake_video_renderers_.empty()) {
155 RenderMap::iterator it = fake_video_renderers_.begin(); 158 RenderMap::iterator it = fake_video_renderers_.begin();
156 delete it->second; 159 delete it->second;
157 fake_video_renderers_.erase(it); 160 fake_video_renderers_.erase(it);
158 } 161 }
159 } 162 }
160 163
161 virtual void Negotiate() = 0; 164 void Negotiate() { Negotiate(true, true); }
162 165
163 virtual void Negotiate(bool audio, bool video) = 0; 166 void Negotiate(bool audio, bool video) {
167 rtc::scoped_ptr<SessionDescriptionInterface> offer;
168 ASSERT_TRUE(DoCreateOffer(offer.use()));
164 169
165 virtual void SetVideoConstraints( 170 if (offer->description()->GetContentByName("audio")) {
166 const webrtc::FakeConstraints& video_constraint) { 171 offer->description()->GetContentByName("audio")->rejected = !audio;
172 }
173 if (offer->description()->GetContentByName("video")) {
174 offer->description()->GetContentByName("video")->rejected = !video;
175 }
176
177 std::string sdp;
178 EXPECT_TRUE(offer->ToString(&sdp));
179 EXPECT_TRUE(DoSetLocalDescription(offer.release()));
180 signaling_message_receiver_->ReceiveSdpMessage(
181 webrtc::SessionDescriptionInterface::kOffer, sdp);
182 }
183
184 // SignalingMessageReceiver callback.
185 void ReceiveSdpMessage(const std::string& type, std::string& msg) override {
186 FilterIncomingSdpMessage(&msg);
187 if (type == webrtc::SessionDescriptionInterface::kOffer) {
188 HandleIncomingOffer(msg);
189 } else {
190 HandleIncomingAnswer(msg);
191 }
192 }
193
194 // SignalingMessageReceiver callback.
195 void ReceiveIceMessage(const std::string& sdp_mid,
196 int sdp_mline_index,
197 const std::string& msg) override {
198 LOG(INFO) << id_ << "ReceiveIceMessage";
199 rtc::scoped_ptr<webrtc::IceCandidateInterface> candidate(
200 webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, msg, nullptr));
201 EXPECT_TRUE(pc()->AddIceCandidate(candidate.get()));
202 }
203
204 // PeerConnectionObserver callbacks.
205 void OnSignalingChange(
206 webrtc::PeerConnectionInterface::SignalingState new_state) override {
207 EXPECT_EQ(pc()->signaling_state(), new_state);
208 }
209 void OnAddStream(webrtc::MediaStreamInterface* media_stream) override {
210 for (size_t i = 0; i < media_stream->GetVideoTracks().size(); ++i) {
211 const std::string id = media_stream->GetVideoTracks()[i]->id();
212 ASSERT_TRUE(fake_video_renderers_.find(id) ==
213 fake_video_renderers_.end());
214 fake_video_renderers_[id] =
215 new webrtc::FakeVideoTrackRenderer(media_stream->GetVideoTracks()[i]);
216 }
217 }
218 void OnRemoveStream(webrtc::MediaStreamInterface* media_stream) override {}
219 void OnRenegotiationNeeded() override {}
220 void OnIceConnectionChange(
221 webrtc::PeerConnectionInterface::IceConnectionState new_state) override {
222 EXPECT_EQ(pc()->ice_connection_state(), new_state);
223 }
224 void OnIceGatheringChange(
225 webrtc::PeerConnectionInterface::IceGatheringState new_state) override {
226 EXPECT_EQ(pc()->ice_gathering_state(), new_state);
227 }
228 void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override {
229 LOG(INFO) << id_ << "OnIceCandidate";
230
231 std::string ice_sdp;
232 EXPECT_TRUE(candidate->ToString(&ice_sdp));
233 if (signaling_message_receiver_ == nullptr) {
234 // Remote party may be deleted.
235 return;
236 }
237 signaling_message_receiver_->ReceiveIceMessage(
238 candidate->sdp_mid(), candidate->sdp_mline_index(), ice_sdp);
239 }
240
241 void SetVideoConstraints(const webrtc::FakeConstraints& video_constraint) {
167 video_constraints_ = video_constraint; 242 video_constraints_ = video_constraint;
168 } 243 }
169 244
170 void AddMediaStream(bool audio, bool video) { 245 void AddMediaStream(bool audio, bool video) {
171 std::string stream_label = kStreamLabelBase + 246 std::string stream_label =
172 rtc::ToString<int>( 247 kStreamLabelBase +
173 static_cast<int>(peer_connection_->local_streams()->count())); 248 rtc::ToString<int>(static_cast<int>(pc()->local_streams()->count()));
174 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = 249 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream =
175 peer_connection_factory_->CreateLocalMediaStream(stream_label); 250 peer_connection_factory_->CreateLocalMediaStream(stream_label);
176 251
177 if (audio && can_receive_audio()) { 252 if (audio && can_receive_audio()) {
178 FakeConstraints constraints; 253 FakeConstraints constraints;
179 // Disable highpass filter so that we can get all the test audio frames. 254 // Disable highpass filter so that we can get all the test audio frames.
180 constraints.AddMandatory( 255 constraints.AddMandatory(
181 MediaConstraintsInterface::kHighpassFilter, false); 256 MediaConstraintsInterface::kHighpassFilter, false);
182 rtc::scoped_refptr<webrtc::AudioSourceInterface> source = 257 rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
183 peer_connection_factory_->CreateAudioSource(&constraints); 258 peer_connection_factory_->CreateAudioSource(&constraints);
184 // TODO(perkj): Test audio source when it is implemented. Currently audio 259 // TODO(perkj): Test audio source when it is implemented. Currently audio
185 // always use the default input. 260 // always use the default input.
186 std::string label = stream_label + kAudioTrackLabelBase; 261 std::string label = stream_label + kAudioTrackLabelBase;
187 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( 262 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
188 peer_connection_factory_->CreateAudioTrack(label, source)); 263 peer_connection_factory_->CreateAudioTrack(label, source));
189 stream->AddTrack(audio_track); 264 stream->AddTrack(audio_track);
190 } 265 }
191 if (video && can_receive_video()) { 266 if (video && can_receive_video()) {
192 stream->AddTrack(CreateLocalVideoTrack(stream_label)); 267 stream->AddTrack(CreateLocalVideoTrack(stream_label));
193 } 268 }
194 269
195 EXPECT_TRUE(peer_connection_->AddStream(stream)); 270 EXPECT_TRUE(pc()->AddStream(stream));
196 } 271 }
197 272
198 size_t NumberOfLocalMediaStreams() { 273 size_t NumberOfLocalMediaStreams() { return pc()->local_streams()->count(); }
199 return peer_connection_->local_streams()->count();
200 }
201 274
202 bool SessionActive() { 275 bool SessionActive() {
203 return peer_connection_->signaling_state() == 276 return pc()->signaling_state() == webrtc::PeerConnectionInterface::kStable;
204 webrtc::PeerConnectionInterface::kStable;
205 } 277 }
206 278
207 void set_signaling_message_receiver( 279 void set_signaling_message_receiver(
208 MessageReceiver* signaling_message_receiver) { 280 SignalingMessageReceiver* signaling_message_receiver) {
209 signaling_message_receiver_ = signaling_message_receiver; 281 signaling_message_receiver_ = signaling_message_receiver;
210 } 282 }
211 283
212 void EnableVideoDecoderFactory() { 284 void EnableVideoDecoderFactory() {
213 video_decoder_factory_enabled_ = true; 285 video_decoder_factory_enabled_ = true;
214 fake_video_decoder_factory_->AddSupportedVideoCodecType( 286 fake_video_decoder_factory_->AddSupportedVideoCodecType(
215 webrtc::kVideoCodecVP8); 287 webrtc::kVideoCodecVP8);
216 } 288 }
217 289
290 void IceRestart() {
291 session_description_constraints_.SetMandatoryIceRestart(true);
292 SetExpectIceRestart(true);
293 }
294
295 void SetExpectIceRestart(bool expect_restart) {
296 expect_ice_restart_ = expect_restart;
297 }
298
299 bool ExpectIceRestart() const { return expect_ice_restart_; }
300
301 void SetReceiveAudioVideo(bool audio, bool video) {
302 SetReceiveAudio(audio);
303 SetReceiveVideo(video);
304 ASSERT_EQ(audio, can_receive_audio());
305 ASSERT_EQ(video, can_receive_video());
306 }
307
308 void SetReceiveAudio(bool audio) {
309 if (audio && can_receive_audio())
310 return;
311 session_description_constraints_.SetMandatoryReceiveAudio(audio);
312 }
313
314 void SetReceiveVideo(bool video) {
315 if (video && can_receive_video())
316 return;
317 session_description_constraints_.SetMandatoryReceiveVideo(video);
318 }
319
320 void RemoveMsidFromReceivedSdp(bool remove) { remove_msid_ = remove; }
321
322 void RemoveSdesCryptoFromReceivedSdp(bool remove) { remove_sdes_ = remove; }
323
324 void RemoveBundleFromReceivedSdp(bool remove) { remove_bundle_ = remove; }
325
326 bool can_receive_audio() {
327 bool value;
328 if (webrtc::FindConstraint(&session_description_constraints_,
329 MediaConstraintsInterface::kOfferToReceiveAudio,
330 &value, nullptr)) {
331 return value;
332 }
333 return true;
334 }
335
336 bool can_receive_video() {
337 bool value;
338 if (webrtc::FindConstraint(&session_description_constraints_,
339 MediaConstraintsInterface::kOfferToReceiveVideo,
340 &value, nullptr)) {
341 return value;
342 }
343 return true;
344 }
345
346 void OnIceComplete() override { LOG(INFO) << id_ << "OnIceComplete"; }
347
348 void OnDataChannel(DataChannelInterface* data_channel) override {
349 LOG(INFO) << id_ << "OnDataChannel";
350 data_channel_ = data_channel;
351 data_observer_.reset(new MockDataChannelObserver(data_channel));
352 }
353
354 void CreateDataChannel() {
355 data_channel_ = pc()->CreateDataChannel(kDataChannelLabel, nullptr);
356 ASSERT_TRUE(data_channel_.get() != nullptr);
357 data_observer_.reset(new MockDataChannelObserver(data_channel_));
358 }
359
360 DataChannelInterface* data_channel() { return data_channel_; }
361 const MockDataChannelObserver* data_observer() const {
362 return data_observer_.get();
363 }
364
365 webrtc::PeerConnectionInterface* pc() { return peer_connection_.get(); }
366
367 void StopVideoCapturers() {
368 for (std::vector<cricket::VideoCapturer*>::iterator it =
369 video_capturers_.begin();
370 it != video_capturers_.end(); ++it) {
371 (*it)->Stop();
372 }
373 }
374
218 bool AudioFramesReceivedCheck(int number_of_frames) const { 375 bool AudioFramesReceivedCheck(int number_of_frames) const {
219 return number_of_frames <= fake_audio_capture_module_->frames_received(); 376 return number_of_frames <= fake_audio_capture_module_->frames_received();
220 } 377 }
221 378
222 bool VideoFramesReceivedCheck(int number_of_frames) { 379 bool VideoFramesReceivedCheck(int number_of_frames) {
223 if (video_decoder_factory_enabled_) { 380 if (video_decoder_factory_enabled_) {
224 const std::vector<FakeWebRtcVideoDecoder*>& decoders 381 const std::vector<FakeWebRtcVideoDecoder*>& decoders
225 = fake_video_decoder_factory_->decoders(); 382 = fake_video_decoder_factory_->decoders();
226 if (decoders.empty()) { 383 if (decoders.empty()) {
227 return number_of_frames <= 0; 384 return number_of_frames <= 0;
(...skipping 13 matching lines...) Expand all
241 398
242 for (RenderMap::const_iterator it = fake_video_renderers_.begin(); 399 for (RenderMap::const_iterator it = fake_video_renderers_.begin();
243 it != fake_video_renderers_.end(); ++it) { 400 it != fake_video_renderers_.end(); ++it) {
244 if (number_of_frames > it->second->num_rendered_frames()) { 401 if (number_of_frames > it->second->num_rendered_frames()) {
245 return false; 402 return false;
246 } 403 }
247 } 404 }
248 return true; 405 return true;
249 } 406 }
250 } 407 }
408
251 // Verify the CreateDtmfSender interface 409 // Verify the CreateDtmfSender interface
252 void VerifyDtmf() { 410 void VerifyDtmf() {
253 rtc::scoped_ptr<DummyDtmfObserver> observer(new DummyDtmfObserver()); 411 rtc::scoped_ptr<DummyDtmfObserver> observer(new DummyDtmfObserver());
254 rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender; 412 rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender;
255 413
256 // We can't create a DTMF sender with an invalid audio track or a non local 414 // We can't create a DTMF sender with an invalid audio track or a non local
257 // track. 415 // track.
258 EXPECT_TRUE(peer_connection_->CreateDtmfSender(NULL) == NULL); 416 EXPECT_TRUE(peer_connection_->CreateDtmfSender(nullptr) == nullptr);
259 rtc::scoped_refptr<webrtc::AudioTrackInterface> non_localtrack( 417 rtc::scoped_refptr<webrtc::AudioTrackInterface> non_localtrack(
260 peer_connection_factory_->CreateAudioTrack("dummy_track", 418 peer_connection_factory_->CreateAudioTrack("dummy_track", nullptr));
261 NULL)); 419 EXPECT_TRUE(peer_connection_->CreateDtmfSender(non_localtrack) == nullptr);
262 EXPECT_TRUE(peer_connection_->CreateDtmfSender(non_localtrack) == NULL);
263 420
264 // We should be able to create a DTMF sender from a local track. 421 // We should be able to create a DTMF sender from a local track.
265 webrtc::AudioTrackInterface* localtrack = 422 webrtc::AudioTrackInterface* localtrack =
266 peer_connection_->local_streams()->at(0)->GetAudioTracks()[0]; 423 peer_connection_->local_streams()->at(0)->GetAudioTracks()[0];
267 dtmf_sender = peer_connection_->CreateDtmfSender(localtrack); 424 dtmf_sender = peer_connection_->CreateDtmfSender(localtrack);
268 EXPECT_TRUE(dtmf_sender.get() != NULL); 425 EXPECT_TRUE(dtmf_sender.get() != nullptr);
269 dtmf_sender->RegisterObserver(observer.get()); 426 dtmf_sender->RegisterObserver(observer.get());
270 427
271 // Test the DtmfSender object just created. 428 // Test the DtmfSender object just created.
272 EXPECT_TRUE(dtmf_sender->CanInsertDtmf()); 429 EXPECT_TRUE(dtmf_sender->CanInsertDtmf());
273 EXPECT_TRUE(dtmf_sender->InsertDtmf("1a", 100, 50)); 430 EXPECT_TRUE(dtmf_sender->InsertDtmf("1a", 100, 50));
274 431
275 // We don't need to verify that the DTMF tones are actually sent out because 432 // We don't need to verify that the DTMF tones are actually sent out because
276 // that is already covered by the tests of the lower level components. 433 // that is already covered by the tests of the lower level components.
277 434
278 EXPECT_TRUE_WAIT(observer->completed(), kMaxWaitMs); 435 EXPECT_TRUE_WAIT(observer->completed(), kMaxWaitMs);
279 std::vector<std::string> tones; 436 std::vector<std::string> tones;
280 tones.push_back("1"); 437 tones.push_back("1");
281 tones.push_back("a"); 438 tones.push_back("a");
282 tones.push_back(""); 439 tones.push_back("");
283 observer->Verify(tones); 440 observer->Verify(tones);
284 441
285 dtmf_sender->UnregisterObserver(); 442 dtmf_sender->UnregisterObserver();
286 } 443 }
287 444
288 // Verifies that the SessionDescription have rejected the appropriate media 445 // Verifies that the SessionDescription have rejected the appropriate media
289 // content. 446 // content.
290 void VerifyRejectedMediaInSessionDescription() { 447 void VerifyRejectedMediaInSessionDescription() {
291 ASSERT_TRUE(peer_connection_->remote_description() != NULL); 448 ASSERT_TRUE(peer_connection_->remote_description() != nullptr);
292 ASSERT_TRUE(peer_connection_->local_description() != NULL); 449 ASSERT_TRUE(peer_connection_->local_description() != nullptr);
293 const cricket::SessionDescription* remote_desc = 450 const cricket::SessionDescription* remote_desc =
294 peer_connection_->remote_description()->description(); 451 peer_connection_->remote_description()->description();
295 const cricket::SessionDescription* local_desc = 452 const cricket::SessionDescription* local_desc =
296 peer_connection_->local_description()->description(); 453 peer_connection_->local_description()->description();
297 454
298 const ContentInfo* remote_audio_content = GetFirstAudioContent(remote_desc); 455 const ContentInfo* remote_audio_content = GetFirstAudioContent(remote_desc);
299 if (remote_audio_content) { 456 if (remote_audio_content) {
300 const ContentInfo* audio_content = 457 const ContentInfo* audio_content =
301 GetFirstAudioContent(local_desc); 458 GetFirstAudioContent(local_desc);
302 EXPECT_EQ(can_receive_audio(), !audio_content->rejected); 459 EXPECT_EQ(can_receive_audio(), !audio_content->rejected);
303 } 460 }
304 461
305 const ContentInfo* remote_video_content = GetFirstVideoContent(remote_desc); 462 const ContentInfo* remote_video_content = GetFirstVideoContent(remote_desc);
306 if (remote_video_content) { 463 if (remote_video_content) {
307 const ContentInfo* video_content = 464 const ContentInfo* video_content =
308 GetFirstVideoContent(local_desc); 465 GetFirstVideoContent(local_desc);
309 EXPECT_EQ(can_receive_video(), !video_content->rejected); 466 EXPECT_EQ(can_receive_video(), !video_content->rejected);
310 } 467 }
311 } 468 }
312 469
313 void SetExpectIceRestart(bool expect_restart) {
314 expect_ice_restart_ = expect_restart;
315 }
316
317 bool ExpectIceRestart() const { return expect_ice_restart_; }
318
319 void VerifyLocalIceUfragAndPassword() { 470 void VerifyLocalIceUfragAndPassword() {
320 ASSERT_TRUE(peer_connection_->local_description() != NULL); 471 ASSERT_TRUE(peer_connection_->local_description() != nullptr);
321 const cricket::SessionDescription* desc = 472 const cricket::SessionDescription* desc =
322 peer_connection_->local_description()->description(); 473 peer_connection_->local_description()->description();
323 const cricket::ContentInfos& contents = desc->contents(); 474 const cricket::ContentInfos& contents = desc->contents();
324 475
325 for (size_t index = 0; index < contents.size(); ++index) { 476 for (size_t index = 0; index < contents.size(); ++index) {
326 if (contents[index].rejected) 477 if (contents[index].rejected)
327 continue; 478 continue;
328 const cricket::TransportDescription* transport_desc = 479 const cricket::TransportDescription* transport_desc =
329 desc->GetTransportDescriptionByName(contents[index].name); 480 desc->GetTransportDescriptionByName(contents[index].name);
330 481
(...skipping 22 matching lines...) Expand all
353 observer, track, PeerConnectionInterface::kStatsOutputLevelStandard)); 504 observer, track, PeerConnectionInterface::kStatsOutputLevelStandard));
354 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 505 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
355 EXPECT_NE(0, observer->timestamp()); 506 EXPECT_NE(0, observer->timestamp());
356 return observer->AudioOutputLevel(); 507 return observer->AudioOutputLevel();
357 } 508 }
358 509
359 int GetAudioInputLevelStats() { 510 int GetAudioInputLevelStats() {
360 rtc::scoped_refptr<MockStatsObserver> 511 rtc::scoped_refptr<MockStatsObserver>
361 observer(new rtc::RefCountedObject<MockStatsObserver>()); 512 observer(new rtc::RefCountedObject<MockStatsObserver>());
362 EXPECT_TRUE(peer_connection_->GetStats( 513 EXPECT_TRUE(peer_connection_->GetStats(
363 observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard)); 514 observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
364 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 515 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
365 EXPECT_NE(0, observer->timestamp()); 516 EXPECT_NE(0, observer->timestamp());
366 return observer->AudioInputLevel(); 517 return observer->AudioInputLevel();
367 } 518 }
368 519
369 int GetBytesReceivedStats(webrtc::MediaStreamTrackInterface* track) { 520 int GetBytesReceivedStats(webrtc::MediaStreamTrackInterface* track) {
370 rtc::scoped_refptr<MockStatsObserver> 521 rtc::scoped_refptr<MockStatsObserver>
371 observer(new rtc::RefCountedObject<MockStatsObserver>()); 522 observer(new rtc::RefCountedObject<MockStatsObserver>());
372 EXPECT_TRUE(peer_connection_->GetStats( 523 EXPECT_TRUE(peer_connection_->GetStats(
373 observer, track, PeerConnectionInterface::kStatsOutputLevelStandard)); 524 observer, track, PeerConnectionInterface::kStatsOutputLevelStandard));
374 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 525 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
375 EXPECT_NE(0, observer->timestamp()); 526 EXPECT_NE(0, observer->timestamp());
376 return observer->BytesReceived(); 527 return observer->BytesReceived();
377 } 528 }
378 529
379 int GetBytesSentStats(webrtc::MediaStreamTrackInterface* track) { 530 int GetBytesSentStats(webrtc::MediaStreamTrackInterface* track) {
380 rtc::scoped_refptr<MockStatsObserver> 531 rtc::scoped_refptr<MockStatsObserver>
381 observer(new rtc::RefCountedObject<MockStatsObserver>()); 532 observer(new rtc::RefCountedObject<MockStatsObserver>());
382 EXPECT_TRUE(peer_connection_->GetStats( 533 EXPECT_TRUE(peer_connection_->GetStats(
383 observer, track, PeerConnectionInterface::kStatsOutputLevelStandard)); 534 observer, track, PeerConnectionInterface::kStatsOutputLevelStandard));
384 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 535 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
385 EXPECT_NE(0, observer->timestamp()); 536 EXPECT_NE(0, observer->timestamp());
386 return observer->BytesSent(); 537 return observer->BytesSent();
387 } 538 }
388 539
389 int GetAvailableReceivedBandwidthStats() { 540 int GetAvailableReceivedBandwidthStats() {
390 rtc::scoped_refptr<MockStatsObserver> 541 rtc::scoped_refptr<MockStatsObserver>
391 observer(new rtc::RefCountedObject<MockStatsObserver>()); 542 observer(new rtc::RefCountedObject<MockStatsObserver>());
392 EXPECT_TRUE(peer_connection_->GetStats( 543 EXPECT_TRUE(peer_connection_->GetStats(
393 observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard)); 544 observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
394 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 545 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
395 EXPECT_NE(0, observer->timestamp()); 546 EXPECT_NE(0, observer->timestamp());
396 int bw = observer->AvailableReceiveBandwidth(); 547 int bw = observer->AvailableReceiveBandwidth();
397 return bw; 548 return bw;
398 } 549 }
399 550
400 std::string GetDtlsCipherStats() { 551 std::string GetDtlsCipherStats() {
401 rtc::scoped_refptr<MockStatsObserver> 552 rtc::scoped_refptr<MockStatsObserver>
402 observer(new rtc::RefCountedObject<MockStatsObserver>()); 553 observer(new rtc::RefCountedObject<MockStatsObserver>());
403 EXPECT_TRUE(peer_connection_->GetStats( 554 EXPECT_TRUE(peer_connection_->GetStats(
404 observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard)); 555 observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
405 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 556 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
406 EXPECT_NE(0, observer->timestamp()); 557 EXPECT_NE(0, observer->timestamp());
407 return observer->DtlsCipher(); 558 return observer->DtlsCipher();
408 } 559 }
409 560
410 std::string GetSrtpCipherStats() { 561 std::string GetSrtpCipherStats() {
411 rtc::scoped_refptr<MockStatsObserver> 562 rtc::scoped_refptr<MockStatsObserver>
412 observer(new rtc::RefCountedObject<MockStatsObserver>()); 563 observer(new rtc::RefCountedObject<MockStatsObserver>());
413 EXPECT_TRUE(peer_connection_->GetStats( 564 EXPECT_TRUE(peer_connection_->GetStats(
414 observer, NULL, PeerConnectionInterface::kStatsOutputLevelStandard)); 565 observer, nullptr, PeerConnectionInterface::kStatsOutputLevelStandard));
415 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 566 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
416 EXPECT_NE(0, observer->timestamp()); 567 EXPECT_NE(0, observer->timestamp());
417 return observer->SrtpCipher(); 568 return observer->SrtpCipher();
418 } 569 }
419 570
420 int rendered_width() { 571 int rendered_width() {
421 EXPECT_FALSE(fake_video_renderers_.empty()); 572 EXPECT_FALSE(fake_video_renderers_.empty());
422 return fake_video_renderers_.empty() ? 1 : 573 return fake_video_renderers_.empty() ? 1 :
423 fake_video_renderers_.begin()->second->width(); 574 fake_video_renderers_.begin()->second->width();
424 } 575 }
425 576
426 int rendered_height() { 577 int rendered_height() {
427 EXPECT_FALSE(fake_video_renderers_.empty()); 578 EXPECT_FALSE(fake_video_renderers_.empty());
428 return fake_video_renderers_.empty() ? 1 : 579 return fake_video_renderers_.empty() ? 1 :
429 fake_video_renderers_.begin()->second->height(); 580 fake_video_renderers_.begin()->second->height();
430 } 581 }
431 582
432 size_t number_of_remote_streams() { 583 size_t number_of_remote_streams() {
433 if (!pc()) 584 if (!pc())
434 return 0; 585 return 0;
435 return pc()->remote_streams()->count(); 586 return pc()->remote_streams()->count();
436 } 587 }
437 588
438 StreamCollectionInterface* remote_streams() { 589 StreamCollectionInterface* remote_streams() {
439 if (!pc()) { 590 if (!pc()) {
440 ADD_FAILURE(); 591 ADD_FAILURE();
441 return NULL; 592 return nullptr;
442 } 593 }
443 return pc()->remote_streams(); 594 return pc()->remote_streams();
444 } 595 }
445 596
446 StreamCollectionInterface* local_streams() { 597 StreamCollectionInterface* local_streams() {
447 if (!pc()) { 598 if (!pc()) {
448 ADD_FAILURE(); 599 ADD_FAILURE();
449 return NULL; 600 return nullptr;
450 } 601 }
451 return pc()->local_streams(); 602 return pc()->local_streams();
452 } 603 }
453 604
454 webrtc::PeerConnectionInterface::SignalingState signaling_state() { 605 webrtc::PeerConnectionInterface::SignalingState signaling_state() {
455 return pc()->signaling_state(); 606 return pc()->signaling_state();
456 } 607 }
457 608
458 webrtc::PeerConnectionInterface::IceConnectionState ice_connection_state() { 609 webrtc::PeerConnectionInterface::IceConnectionState ice_connection_state() {
459 return pc()->ice_connection_state(); 610 return pc()->ice_connection_state();
460 } 611 }
461 612
462 webrtc::PeerConnectionInterface::IceGatheringState ice_gathering_state() { 613 webrtc::PeerConnectionInterface::IceGatheringState ice_gathering_state() {
463 return pc()->ice_gathering_state(); 614 return pc()->ice_gathering_state();
464 } 615 }
465 616
466 // PeerConnectionObserver callbacks. 617 private:
467 virtual void OnMessage(const std::string&) {} 618 class DummyDtmfObserver : public DtmfSenderObserverInterface {
468 virtual void OnSignalingMessage(const std::string& /*msg*/) {} 619 public:
469 virtual void OnSignalingChange( 620 DummyDtmfObserver() : completed_(false) {}
470 webrtc::PeerConnectionInterface::SignalingState new_state) { 621
471 EXPECT_EQ(peer_connection_->signaling_state(), new_state); 622 // Implements DtmfSenderObserverInterface.
472 } 623 void OnToneChange(const std::string& tone) override {
473 virtual void OnAddStream(webrtc::MediaStreamInterface* media_stream) { 624 tones_.push_back(tone);
474 for (size_t i = 0; i < media_stream->GetVideoTracks().size(); ++i) { 625 if (tone.empty()) {
475 const std::string id = media_stream->GetVideoTracks()[i]->id(); 626 completed_ = true;
476 ASSERT_TRUE(fake_video_renderers_.find(id) == 627 }
477 fake_video_renderers_.end());
478 fake_video_renderers_[id] = new webrtc::FakeVideoTrackRenderer(
479 media_stream->GetVideoTracks()[i]);
480 } 628 }
481 }
482 virtual void OnRemoveStream(webrtc::MediaStreamInterface* media_stream) {}
483 virtual void OnRenegotiationNeeded() {}
484 virtual void OnIceConnectionChange(
485 webrtc::PeerConnectionInterface::IceConnectionState new_state) {
486 EXPECT_EQ(peer_connection_->ice_connection_state(), new_state);
487 }
488 virtual void OnIceGatheringChange(
489 webrtc::PeerConnectionInterface::IceGatheringState new_state) {
490 EXPECT_EQ(peer_connection_->ice_gathering_state(), new_state);
491 }
492 virtual void OnIceCandidate(
493 const webrtc::IceCandidateInterface* /*candidate*/) {}
494 629
495 webrtc::PeerConnectionInterface* pc() { 630 void Verify(const std::vector<std::string>& tones) const {
496 return peer_connection_.get(); 631 ASSERT_TRUE(tones_.size() == tones.size());
497 } 632 EXPECT_TRUE(std::equal(tones.begin(), tones.end(), tones_.begin()));
498 void StopVideoCapturers() {
499 for (std::vector<cricket::VideoCapturer*>::iterator it =
500 video_capturers_.begin(); it != video_capturers_.end(); ++it) {
501 (*it)->Stop();
502 } 633 }
503 }
504 634
505 protected: 635 bool completed() const { return completed_; }
506 explicit PeerConnectionTestClientBase(const std::string& id) 636
507 : id_(id), 637 private:
508 expect_ice_restart_(false), 638 bool completed_;
509 fake_video_decoder_factory_(NULL), 639 std::vector<std::string> tones_;
510 fake_video_encoder_factory_(NULL), 640 };
511 video_decoder_factory_enabled_(false), 641
512 signaling_message_receiver_(NULL) { 642 explicit PeerConnectionTestClient(const std::string& id) : id_(id) {}
513 } 643
514 bool Init(const MediaConstraintsInterface* constraints, 644 bool Init(const MediaConstraintsInterface* constraints,
515 const PeerConnectionFactory::Options* options) { 645 const PeerConnectionFactory::Options* options) {
516 EXPECT_TRUE(!peer_connection_); 646 EXPECT_TRUE(!peer_connection_);
517 EXPECT_TRUE(!peer_connection_factory_); 647 EXPECT_TRUE(!peer_connection_factory_);
518 allocator_factory_ = webrtc::FakePortAllocatorFactory::Create(); 648 allocator_factory_ = webrtc::FakePortAllocatorFactory::Create();
519 if (!allocator_factory_) { 649 if (!allocator_factory_) {
520 return false; 650 return false;
521 } 651 }
522 fake_audio_capture_module_ = FakeAudioCaptureModule::Create(); 652 fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
523 653
524 if (fake_audio_capture_module_ == NULL) { 654 if (fake_audio_capture_module_ == nullptr) {
525 return false; 655 return false;
526 } 656 }
527 fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory(); 657 fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory();
528 fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory(); 658 fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory();
529 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( 659 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
530 rtc::Thread::Current(), rtc::Thread::Current(), 660 rtc::Thread::Current(), rtc::Thread::Current(),
531 fake_audio_capture_module_, fake_video_encoder_factory_, 661 fake_audio_capture_module_, fake_video_encoder_factory_,
532 fake_video_decoder_factory_); 662 fake_video_decoder_factory_);
533 if (!peer_connection_factory_) { 663 if (!peer_connection_factory_) {
534 return false; 664 return false;
535 } 665 }
536 if (options) { 666 if (options) {
537 peer_connection_factory_->SetOptions(*options); 667 peer_connection_factory_->SetOptions(*options);
538 } 668 }
539 peer_connection_ = CreatePeerConnection(allocator_factory_.get(), 669 peer_connection_ = CreatePeerConnection(allocator_factory_.get(),
540 constraints); 670 constraints);
541 return peer_connection_.get() != NULL; 671 return peer_connection_.get() != nullptr;
542 } 672 }
543 virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface>
544 CreatePeerConnection(webrtc::PortAllocatorFactoryInterface* factory,
545 const MediaConstraintsInterface* constraints) = 0;
546 MessageReceiver* signaling_message_receiver() {
547 return signaling_message_receiver_;
548 }
549 webrtc::PeerConnectionFactoryInterface* peer_connection_factory() {
550 return peer_connection_factory_.get();
551 }
552
553 virtual bool can_receive_audio() = 0;
554 virtual bool can_receive_video() = 0;
555 const std::string& id() const { return id_; }
556
557 private:
558 class DummyDtmfObserver : public DtmfSenderObserverInterface {
559 public:
560 DummyDtmfObserver() : completed_(false) {}
561
562 // Implements DtmfSenderObserverInterface.
563 void OnToneChange(const std::string& tone) {
564 tones_.push_back(tone);
565 if (tone.empty()) {
566 completed_ = true;
567 }
568 }
569
570 void Verify(const std::vector<std::string>& tones) const {
571 ASSERT_TRUE(tones_.size() == tones.size());
572 EXPECT_TRUE(std::equal(tones.begin(), tones.end(), tones_.begin()));
573 }
574
575 bool completed() const { return completed_; }
576
577 private:
578 bool completed_;
579 std::vector<std::string> tones_;
580 };
581 673
582 rtc::scoped_refptr<webrtc::VideoTrackInterface> 674 rtc::scoped_refptr<webrtc::VideoTrackInterface>
583 CreateLocalVideoTrack(const std::string stream_label) { 675 CreateLocalVideoTrack(const std::string stream_label) {
584 // Set max frame rate to 10fps to reduce the risk of the tests to be flaky. 676 // Set max frame rate to 10fps to reduce the risk of the tests to be flaky.
585 FakeConstraints source_constraints = video_constraints_; 677 FakeConstraints source_constraints = video_constraints_;
586 source_constraints.SetMandatoryMaxFrameRate(10); 678 source_constraints.SetMandatoryMaxFrameRate(10);
587 679
588 cricket::FakeVideoCapturer* fake_capturer = 680 cricket::FakeVideoCapturer* fake_capturer =
589 new webrtc::FakePeriodicVideoCapturer(); 681 new webrtc::FakePeriodicVideoCapturer();
590 video_capturers_.push_back(fake_capturer); 682 video_capturers_.push_back(fake_capturer);
591 rtc::scoped_refptr<webrtc::VideoSourceInterface> source = 683 rtc::scoped_refptr<webrtc::VideoSourceInterface> source =
592 peer_connection_factory_->CreateVideoSource( 684 peer_connection_factory_->CreateVideoSource(
593 fake_capturer, &source_constraints); 685 fake_capturer, &source_constraints);
594 std::string label = stream_label + kVideoTrackLabelBase; 686 std::string label = stream_label + kVideoTrackLabelBase;
595 return peer_connection_factory_->CreateVideoTrack(label, source); 687 return peer_connection_factory_->CreateVideoTrack(label, source);
596 } 688 }
597 689
598 std::string id_; 690 rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(
599 691 webrtc::PortAllocatorFactoryInterface* factory,
600 rtc::scoped_refptr<webrtc::PortAllocatorFactoryInterface> 692 const MediaConstraintsInterface* constraints) {
601 allocator_factory_;
602 rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
603 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
604 peer_connection_factory_;
605
606 typedef std::pair<std::string, std::string> IceUfragPwdPair;
607 std::map<int, IceUfragPwdPair> ice_ufrag_pwd_;
608 bool expect_ice_restart_;
609
610 // Needed to keep track of number of frames send.
611 rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_;
612 // Needed to keep track of number of frames received.
613 typedef std::map<std::string, webrtc::FakeVideoTrackRenderer*> RenderMap;
614 RenderMap fake_video_renderers_;
615 // Needed to keep track of number of frames received when external decoder
616 // used.
617 FakeWebRtcVideoDecoderFactory* fake_video_decoder_factory_;
618 FakeWebRtcVideoEncoderFactory* fake_video_encoder_factory_;
619 bool video_decoder_factory_enabled_;
620 webrtc::FakeConstraints video_constraints_;
621
622 // For remote peer communication.
623 MessageReceiver* signaling_message_receiver_;
624
625 // Store references to the video capturers we've created, so that we can stop
626 // them, if required.
627 std::vector<cricket::VideoCapturer*> video_capturers_;
628 };
629
630 class JsepTestClient
631 : public PeerConnectionTestClientBase<JsepMessageReceiver> {
632 public:
633 static JsepTestClient* CreateClient(
634 const std::string& id,
635 const MediaConstraintsInterface* constraints,
636 const PeerConnectionFactory::Options* options) {
637 JsepTestClient* client(new JsepTestClient(id));
638 if (!client->Init(constraints, options)) {
639 delete client;
640 return NULL;
641 }
642 return client;
643 }
644 ~JsepTestClient() {}
645
646 virtual void Negotiate() {
647 Negotiate(true, true);
648 }
649 virtual void Negotiate(bool audio, bool video) {
650 rtc::scoped_ptr<SessionDescriptionInterface> offer;
651 ASSERT_TRUE(DoCreateOffer(offer.use()));
652
653 if (offer->description()->GetContentByName("audio")) {
654 offer->description()->GetContentByName("audio")->rejected = !audio;
655 }
656 if (offer->description()->GetContentByName("video")) {
657 offer->description()->GetContentByName("video")->rejected = !video;
658 }
659
660 std::string sdp;
661 EXPECT_TRUE(offer->ToString(&sdp));
662 EXPECT_TRUE(DoSetLocalDescription(offer.release()));
663 signaling_message_receiver()->ReceiveSdpMessage(
664 webrtc::SessionDescriptionInterface::kOffer, sdp);
665 }
666 // JsepMessageReceiver callback.
667 virtual void ReceiveSdpMessage(const std::string& type,
668 std::string& msg) {
669 FilterIncomingSdpMessage(&msg);
670 if (type == webrtc::SessionDescriptionInterface::kOffer) {
671 HandleIncomingOffer(msg);
672 } else {
673 HandleIncomingAnswer(msg);
674 }
675 }
676 // JsepMessageReceiver callback.
677 virtual void ReceiveIceMessage(const std::string& sdp_mid,
678 int sdp_mline_index,
679 const std::string& msg) {
680 LOG(INFO) << id() << "ReceiveIceMessage";
681 rtc::scoped_ptr<webrtc::IceCandidateInterface> candidate(
682 webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, msg, NULL));
683 EXPECT_TRUE(pc()->AddIceCandidate(candidate.get()));
684 }
685 // Implements PeerConnectionObserver functions needed by Jsep.
686 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) {
687 LOG(INFO) << id() << "OnIceCandidate";
688
689 std::string ice_sdp;
690 EXPECT_TRUE(candidate->ToString(&ice_sdp));
691 if (signaling_message_receiver() == NULL) {
692 // Remote party may be deleted.
693 return;
694 }
695 signaling_message_receiver()->ReceiveIceMessage(candidate->sdp_mid(),
696 candidate->sdp_mline_index(), ice_sdp);
697 }
698
699 void IceRestart() {
700 session_description_constraints_.SetMandatoryIceRestart(true);
701 SetExpectIceRestart(true);
702 }
703
704 void SetReceiveAudioVideo(bool audio, bool video) {
705 SetReceiveAudio(audio);
706 SetReceiveVideo(video);
707 ASSERT_EQ(audio, can_receive_audio());
708 ASSERT_EQ(video, can_receive_video());
709 }
710
711 void SetReceiveAudio(bool audio) {
712 if (audio && can_receive_audio())
713 return;
714 session_description_constraints_.SetMandatoryReceiveAudio(audio);
715 }
716
717 void SetReceiveVideo(bool video) {
718 if (video && can_receive_video())
719 return;
720 session_description_constraints_.SetMandatoryReceiveVideo(video);
721 }
722
723 void RemoveMsidFromReceivedSdp(bool remove) {
724 remove_msid_ = remove;
725 }
726
727 void RemoveSdesCryptoFromReceivedSdp(bool remove) {
728 remove_sdes_ = remove;
729 }
730
731 void RemoveBundleFromReceivedSdp(bool remove) {
732 remove_bundle_ = remove;
733 }
734
735 virtual bool can_receive_audio() {
736 bool value;
737 if (webrtc::FindConstraint(&session_description_constraints_,
738 MediaConstraintsInterface::kOfferToReceiveAudio, &value, NULL)) {
739 return value;
740 }
741 return true;
742 }
743
744 virtual bool can_receive_video() {
745 bool value;
746 if (webrtc::FindConstraint(&session_description_constraints_,
747 MediaConstraintsInterface::kOfferToReceiveVideo, &value, NULL)) {
748 return value;
749 }
750 return true;
751 }
752
753 virtual void OnIceComplete() {
754 LOG(INFO) << id() << "OnIceComplete";
755 }
756
757 virtual void OnDataChannel(DataChannelInterface* data_channel) {
758 LOG(INFO) << id() << "OnDataChannel";
759 data_channel_ = data_channel;
760 data_observer_.reset(new MockDataChannelObserver(data_channel));
761 }
762
763 void CreateDataChannel() {
764 data_channel_ = pc()->CreateDataChannel(kDataChannelLabel,
765 NULL);
766 ASSERT_TRUE(data_channel_.get() != NULL);
767 data_observer_.reset(new MockDataChannelObserver(data_channel_));
768 }
769
770 DataChannelInterface* data_channel() { return data_channel_; }
771 const MockDataChannelObserver* data_observer() const {
772 return data_observer_.get();
773 }
774
775 protected:
776 explicit JsepTestClient(const std::string& id)
777 : PeerConnectionTestClientBase<JsepMessageReceiver>(id),
778 remove_msid_(false),
779 remove_bundle_(false),
780 remove_sdes_(false) {
781 }
782
783 rtc::scoped_refptr<webrtc::PeerConnectionInterface>
784 CreatePeerConnection(
785 webrtc::PortAllocatorFactoryInterface* factory,
786 const MediaConstraintsInterface* constraints) override {
787 // CreatePeerConnection with IceServers. 693 // CreatePeerConnection with IceServers.
788 webrtc::PeerConnectionInterface::IceServers ice_servers; 694 webrtc::PeerConnectionInterface::IceServers ice_servers;
789 webrtc::PeerConnectionInterface::IceServer ice_server; 695 webrtc::PeerConnectionInterface::IceServer ice_server;
790 ice_server.uri = "stun:stun.l.google.com:19302"; 696 ice_server.uri = "stun:stun.l.google.com:19302";
791 ice_servers.push_back(ice_server); 697 ice_servers.push_back(ice_server);
792 698
793 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store( 699 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store(
794 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() 700 rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore()
795 : nullptr); 701 : nullptr);
796 return peer_connection_factory()->CreatePeerConnection( 702 return peer_connection_factory_->CreatePeerConnection(
797 ice_servers, constraints, factory, dtls_identity_store.Pass(), this); 703 ice_servers, constraints, factory, dtls_identity_store.Pass(), this);
798 } 704 }
799 705
800 void HandleIncomingOffer(const std::string& msg) { 706 void HandleIncomingOffer(const std::string& msg) {
801 LOG(INFO) << id() << "HandleIncomingOffer "; 707 LOG(INFO) << id_ << "HandleIncomingOffer ";
802 if (NumberOfLocalMediaStreams() == 0) { 708 if (NumberOfLocalMediaStreams() == 0) {
803 // If we are not sending any streams ourselves it is time to add some. 709 // If we are not sending any streams ourselves it is time to add some.
804 AddMediaStream(true, true); 710 AddMediaStream(true, true);
805 } 711 }
806 rtc::scoped_ptr<SessionDescriptionInterface> desc( 712 rtc::scoped_ptr<SessionDescriptionInterface> desc(
807 webrtc::CreateSessionDescription("offer", msg, NULL)); 713 webrtc::CreateSessionDescription("offer", msg, nullptr));
808 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); 714 EXPECT_TRUE(DoSetRemoteDescription(desc.release()));
809 rtc::scoped_ptr<SessionDescriptionInterface> answer; 715 rtc::scoped_ptr<SessionDescriptionInterface> answer;
810 EXPECT_TRUE(DoCreateAnswer(answer.use())); 716 EXPECT_TRUE(DoCreateAnswer(answer.use()));
811 std::string sdp; 717 std::string sdp;
812 EXPECT_TRUE(answer->ToString(&sdp)); 718 EXPECT_TRUE(answer->ToString(&sdp));
813 EXPECT_TRUE(DoSetLocalDescription(answer.release())); 719 EXPECT_TRUE(DoSetLocalDescription(answer.release()));
814 if (signaling_message_receiver()) { 720 if (signaling_message_receiver_) {
815 signaling_message_receiver()->ReceiveSdpMessage( 721 signaling_message_receiver_->ReceiveSdpMessage(
816 webrtc::SessionDescriptionInterface::kAnswer, sdp); 722 webrtc::SessionDescriptionInterface::kAnswer, sdp);
817 } 723 }
818 } 724 }
819 725
820 void HandleIncomingAnswer(const std::string& msg) { 726 void HandleIncomingAnswer(const std::string& msg) {
821 LOG(INFO) << id() << "HandleIncomingAnswer"; 727 LOG(INFO) << id_ << "HandleIncomingAnswer";
822 rtc::scoped_ptr<SessionDescriptionInterface> desc( 728 rtc::scoped_ptr<SessionDescriptionInterface> desc(
823 webrtc::CreateSessionDescription("answer", msg, NULL)); 729 webrtc::CreateSessionDescription("answer", msg, nullptr));
824 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); 730 EXPECT_TRUE(DoSetRemoteDescription(desc.release()));
825 } 731 }
826 732
827 bool DoCreateOfferAnswer(SessionDescriptionInterface** desc, 733 bool DoCreateOfferAnswer(SessionDescriptionInterface** desc,
828 bool offer) { 734 bool offer) {
829 rtc::scoped_refptr<MockCreateSessionDescriptionObserver> 735 rtc::scoped_refptr<MockCreateSessionDescriptionObserver>
830 observer(new rtc::RefCountedObject< 736 observer(new rtc::RefCountedObject<
831 MockCreateSessionDescriptionObserver>()); 737 MockCreateSessionDescriptionObserver>());
832 if (offer) { 738 if (offer) {
833 pc()->CreateOffer(observer, &session_description_constraints_); 739 pc()->CreateOffer(observer, &session_description_constraints_);
(...skipping 13 matching lines...) Expand all
847 } 753 }
848 754
849 bool DoCreateAnswer(SessionDescriptionInterface** desc) { 755 bool DoCreateAnswer(SessionDescriptionInterface** desc) {
850 return DoCreateOfferAnswer(desc, false); 756 return DoCreateOfferAnswer(desc, false);
851 } 757 }
852 758
853 bool DoSetLocalDescription(SessionDescriptionInterface* desc) { 759 bool DoSetLocalDescription(SessionDescriptionInterface* desc) {
854 rtc::scoped_refptr<MockSetSessionDescriptionObserver> 760 rtc::scoped_refptr<MockSetSessionDescriptionObserver>
855 observer(new rtc::RefCountedObject< 761 observer(new rtc::RefCountedObject<
856 MockSetSessionDescriptionObserver>()); 762 MockSetSessionDescriptionObserver>());
857 LOG(INFO) << id() << "SetLocalDescription "; 763 LOG(INFO) << id_ << "SetLocalDescription ";
858 pc()->SetLocalDescription(observer, desc); 764 pc()->SetLocalDescription(observer, desc);
859 // Ignore the observer result. If we wait for the result with 765 // Ignore the observer result. If we wait for the result with
860 // EXPECT_TRUE_WAIT, local ice candidates might be sent to the remote peer 766 // EXPECT_TRUE_WAIT, local ice candidates might be sent to the remote peer
861 // before the offer which is an error. 767 // before the offer which is an error.
862 // The reason is that EXPECT_TRUE_WAIT uses 768 // The reason is that EXPECT_TRUE_WAIT uses
863 // rtc::Thread::Current()->ProcessMessages(1); 769 // rtc::Thread::Current()->ProcessMessages(1);
864 // ProcessMessages waits at least 1ms but processes all messages before 770 // ProcessMessages waits at least 1ms but processes all messages before
865 // returning. Since this test is synchronous and send messages to the remote 771 // returning. Since this test is synchronous and send messages to the remote
866 // peer whenever a callback is invoked, this can lead to messages being 772 // peer whenever a callback is invoked, this can lead to messages being
867 // sent to the remote peer in the wrong order. 773 // sent to the remote peer in the wrong order.
868 // TODO(perkj): Find a way to check the result without risking that the 774 // TODO(perkj): Find a way to check the result without risking that the
869 // order of sent messages are changed. Ex- by posting all messages that are 775 // order of sent messages are changed. Ex- by posting all messages that are
870 // sent to the remote peer. 776 // sent to the remote peer.
871 return true; 777 return true;
872 } 778 }
873 779
874 bool DoSetRemoteDescription(SessionDescriptionInterface* desc) { 780 bool DoSetRemoteDescription(SessionDescriptionInterface* desc) {
875 rtc::scoped_refptr<MockSetSessionDescriptionObserver> 781 rtc::scoped_refptr<MockSetSessionDescriptionObserver>
876 observer(new rtc::RefCountedObject< 782 observer(new rtc::RefCountedObject<
877 MockSetSessionDescriptionObserver>()); 783 MockSetSessionDescriptionObserver>());
878 LOG(INFO) << id() << "SetRemoteDescription "; 784 LOG(INFO) << id_ << "SetRemoteDescription ";
879 pc()->SetRemoteDescription(observer, desc); 785 pc()->SetRemoteDescription(observer, desc);
880 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs); 786 EXPECT_TRUE_WAIT(observer->called(), kMaxWaitMs);
881 return observer->result(); 787 return observer->result();
882 } 788 }
883 789
884 // This modifies all received SDP messages before they are processed. 790 // This modifies all received SDP messages before they are processed.
885 void FilterIncomingSdpMessage(std::string* sdp) { 791 void FilterIncomingSdpMessage(std::string* sdp) {
886 if (remove_msid_) { 792 if (remove_msid_) {
887 const char kSdpSsrcAttribute[] = "a=ssrc:"; 793 const char kSdpSsrcAttribute[] = "a=ssrc:";
888 RemoveLinesFromSdp(kSdpSsrcAttribute, sdp); 794 RemoveLinesFromSdp(kSdpSsrcAttribute, sdp);
889 const char kSdpMsidSupportedAttribute[] = "a=msid-semantic:"; 795 const char kSdpMsidSupportedAttribute[] = "a=msid-semantic:";
890 RemoveLinesFromSdp(kSdpMsidSupportedAttribute, sdp); 796 RemoveLinesFromSdp(kSdpMsidSupportedAttribute, sdp);
891 } 797 }
892 if (remove_bundle_) { 798 if (remove_bundle_) {
893 const char kSdpBundleAttribute[] = "a=group:BUNDLE"; 799 const char kSdpBundleAttribute[] = "a=group:BUNDLE";
894 RemoveLinesFromSdp(kSdpBundleAttribute, sdp); 800 RemoveLinesFromSdp(kSdpBundleAttribute, sdp);
895 } 801 }
896 if (remove_sdes_) { 802 if (remove_sdes_) {
897 const char kSdpSdesCryptoAttribute[] = "a=crypto"; 803 const char kSdpSdesCryptoAttribute[] = "a=crypto";
898 RemoveLinesFromSdp(kSdpSdesCryptoAttribute, sdp); 804 RemoveLinesFromSdp(kSdpSdesCryptoAttribute, sdp);
899 } 805 }
900 } 806 }
901 807
902 private: 808 std::string id_;
809
810 rtc::scoped_refptr<webrtc::PortAllocatorFactoryInterface> allocator_factory_;
811 rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
812 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
813 peer_connection_factory_;
814
815 typedef std::pair<std::string, std::string> IceUfragPwdPair;
816 std::map<int, IceUfragPwdPair> ice_ufrag_pwd_;
817 bool expect_ice_restart_ = false;
818
819 // Needed to keep track of number of frames send.
820 rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_;
821 // Needed to keep track of number of frames received.
822 typedef std::map<std::string, webrtc::FakeVideoTrackRenderer*> RenderMap;
823 RenderMap fake_video_renderers_;
824 // Needed to keep track of number of frames received when external decoder
825 // used.
826 FakeWebRtcVideoDecoderFactory* fake_video_decoder_factory_ = nullptr;
827 FakeWebRtcVideoEncoderFactory* fake_video_encoder_factory_ = nullptr;
828 bool video_decoder_factory_enabled_ = false;
829 webrtc::FakeConstraints video_constraints_;
830
831 // For remote peer communication.
832 SignalingMessageReceiver* signaling_message_receiver_ = nullptr;
833
834 // Store references to the video capturers we've created, so that we can stop
835 // them, if required.
836 std::vector<cricket::VideoCapturer*> video_capturers_;
837
903 webrtc::FakeConstraints session_description_constraints_; 838 webrtc::FakeConstraints session_description_constraints_;
904 bool remove_msid_; // True if MSID should be removed in received SDP. 839 bool remove_msid_ = false; // True if MSID should be removed in received SDP.
905 bool remove_bundle_; // True if bundle should be removed in received SDP. 840 bool remove_bundle_ =
906 bool remove_sdes_; // True if a=crypto should be removed in received SDP. 841 false; // True if bundle should be removed in received SDP.
842 bool remove_sdes_ =
843 false; // True if a=crypto should be removed in received SDP.
907 844
908 rtc::scoped_refptr<DataChannelInterface> data_channel_; 845 rtc::scoped_refptr<DataChannelInterface> data_channel_;
909 rtc::scoped_ptr<MockDataChannelObserver> data_observer_; 846 rtc::scoped_ptr<MockDataChannelObserver> data_observer_;
910 }; 847 };
911 848
912 template <typename SignalingClass>
913 class P2PTestConductor : public testing::Test { 849 class P2PTestConductor : public testing::Test {
914 public: 850 public:
915 P2PTestConductor() 851 P2PTestConductor()
916 : pss_(new rtc::PhysicalSocketServer), 852 : pss_(new rtc::PhysicalSocketServer),
917 ss_(new rtc::VirtualSocketServer(pss_.get())), 853 ss_(new rtc::VirtualSocketServer(pss_.get())),
918 ss_scope_(ss_.get()) {} 854 ss_scope_(ss_.get()) {}
919 855
920 bool SessionActive() { 856 bool SessionActive() {
921 return initiating_client_->SessionActive() && 857 return initiating_client_->SessionActive() &&
922 receiving_client_->SessionActive(); 858 receiving_client_->SessionActive();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 898
963 void VerifySessionDescriptions() { 899 void VerifySessionDescriptions() {
964 initiating_client_->VerifyRejectedMediaInSessionDescription(); 900 initiating_client_->VerifyRejectedMediaInSessionDescription();
965 receiving_client_->VerifyRejectedMediaInSessionDescription(); 901 receiving_client_->VerifyRejectedMediaInSessionDescription();
966 initiating_client_->VerifyLocalIceUfragAndPassword(); 902 initiating_client_->VerifyLocalIceUfragAndPassword();
967 receiving_client_->VerifyLocalIceUfragAndPassword(); 903 receiving_client_->VerifyLocalIceUfragAndPassword();
968 } 904 }
969 905
970 ~P2PTestConductor() { 906 ~P2PTestConductor() {
971 if (initiating_client_) { 907 if (initiating_client_) {
972 initiating_client_->set_signaling_message_receiver(NULL); 908 initiating_client_->set_signaling_message_receiver(nullptr);
973 } 909 }
974 if (receiving_client_) { 910 if (receiving_client_) {
975 receiving_client_->set_signaling_message_receiver(NULL); 911 receiving_client_->set_signaling_message_receiver(nullptr);
976 } 912 }
977 } 913 }
978 914
979 bool CreateTestClients() { 915 bool CreateTestClients() { return CreateTestClients(nullptr, nullptr); }
980 return CreateTestClients(NULL, NULL);
981 }
982 916
983 bool CreateTestClients(MediaConstraintsInterface* init_constraints, 917 bool CreateTestClients(MediaConstraintsInterface* init_constraints,
984 MediaConstraintsInterface* recv_constraints) { 918 MediaConstraintsInterface* recv_constraints) {
985 return CreateTestClients(init_constraints, NULL, recv_constraints, NULL); 919 return CreateTestClients(init_constraints, nullptr, recv_constraints,
920 nullptr);
986 } 921 }
987 922
988 bool CreateTestClients(MediaConstraintsInterface* init_constraints, 923 bool CreateTestClients(MediaConstraintsInterface* init_constraints,
989 PeerConnectionFactory::Options* init_options, 924 PeerConnectionFactory::Options* init_options,
990 MediaConstraintsInterface* recv_constraints, 925 MediaConstraintsInterface* recv_constraints,
991 PeerConnectionFactory::Options* recv_options) { 926 PeerConnectionFactory::Options* recv_options) {
992 initiating_client_.reset(SignalingClass::CreateClient("Caller: ", 927 initiating_client_.reset(PeerConnectionTestClient::CreateClient(
993 init_constraints, 928 "Caller: ", init_constraints, init_options));
994 init_options)); 929 receiving_client_.reset(PeerConnectionTestClient::CreateClient(
995 receiving_client_.reset(SignalingClass::CreateClient("Callee: ", 930 "Callee: ", recv_constraints, recv_options));
996 recv_constraints,
997 recv_options));
998 if (!initiating_client_ || !receiving_client_) { 931 if (!initiating_client_ || !receiving_client_) {
999 return false; 932 return false;
1000 } 933 }
1001 initiating_client_->set_signaling_message_receiver(receiving_client_.get()); 934 initiating_client_->set_signaling_message_receiver(receiving_client_.get());
1002 receiving_client_->set_signaling_message_receiver(initiating_client_.get()); 935 receiving_client_->set_signaling_message_receiver(initiating_client_.get());
1003 return true; 936 return true;
1004 } 937 }
1005 938
1006 void SetVideoConstraints(const webrtc::FakeConstraints& init_constraints, 939 void SetVideoConstraints(const webrtc::FakeConstraints& init_constraints,
1007 const webrtc::FakeConstraints& recv_constraints) { 940 const webrtc::FakeConstraints& recv_constraints) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 void SendRtpData(webrtc::DataChannelInterface* dc, const std::string& data) { 1014 void SendRtpData(webrtc::DataChannelInterface* dc, const std::string& data) {
1082 // Messages may get lost on the unreliable DataChannel, so we send multiple 1015 // Messages may get lost on the unreliable DataChannel, so we send multiple
1083 // times to avoid test flakiness. 1016 // times to avoid test flakiness.
1084 static const size_t kSendAttempts = 5; 1017 static const size_t kSendAttempts = 5;
1085 1018
1086 for (size_t i = 0; i < kSendAttempts; ++i) { 1019 for (size_t i = 0; i < kSendAttempts; ++i) {
1087 dc->Send(DataBuffer(data)); 1020 dc->Send(DataBuffer(data));
1088 } 1021 }
1089 } 1022 }
1090 1023
1091 SignalingClass* initializing_client() { return initiating_client_.get(); } 1024 PeerConnectionTestClient* initializing_client() {
1092 SignalingClass* receiving_client() { return receiving_client_.get(); } 1025 return initiating_client_.get();
1026 }
1027 PeerConnectionTestClient* receiving_client() {
1028 return receiving_client_.get();
1029 }
1093 1030
1094 private: 1031 private:
1095 rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; 1032 rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_;
1096 rtc::scoped_ptr<rtc::VirtualSocketServer> ss_; 1033 rtc::scoped_ptr<rtc::VirtualSocketServer> ss_;
1097 rtc::SocketServerScope ss_scope_; 1034 rtc::SocketServerScope ss_scope_;
1098 rtc::scoped_ptr<SignalingClass> initiating_client_; 1035 rtc::scoped_ptr<PeerConnectionTestClient> initiating_client_;
1099 rtc::scoped_ptr<SignalingClass> receiving_client_; 1036 rtc::scoped_ptr<PeerConnectionTestClient> receiving_client_;
1100 }; 1037 };
1101 typedef P2PTestConductor<JsepTestClient> JsepPeerConnectionP2PTestClient;
1102 1038
1103 // Disable for TSan v2, see 1039 // Disable for TSan v2, see
1104 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details. 1040 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details.
1105 #if !defined(THREAD_SANITIZER) 1041 #if !defined(THREAD_SANITIZER)
1106 1042
1107 // This test sets up a Jsep call between two parties and test Dtmf. 1043 // This test sets up a Jsep call between two parties and test Dtmf.
1108 // TODO(holmer): Disabled due to sometimes crashing on buildbots. 1044 // TODO(holmer): Disabled due to sometimes crashing on buildbots.
1109 // See issue webrtc/2378. 1045 // See issue webrtc/2378.
1110 TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestDtmf) { 1046 TEST_F(P2PTestConductor, DISABLED_LocalP2PTestDtmf) {
1111 ASSERT_TRUE(CreateTestClients()); 1047 ASSERT_TRUE(CreateTestClients());
1112 LocalP2PTest(); 1048 LocalP2PTest();
1113 VerifyDtmf(); 1049 VerifyDtmf();
1114 } 1050 }
1115 1051
1116 // This test sets up a Jsep call between two parties and test that we can get a 1052 // This test sets up a Jsep call between two parties and test that we can get a
1117 // video aspect ratio of 16:9. 1053 // video aspect ratio of 16:9.
1118 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTest16To9) { 1054 TEST_F(P2PTestConductor, LocalP2PTest16To9) {
1119 ASSERT_TRUE(CreateTestClients()); 1055 ASSERT_TRUE(CreateTestClients());
1120 FakeConstraints constraint; 1056 FakeConstraints constraint;
1121 double requested_ratio = 640.0/360; 1057 double requested_ratio = 640.0/360;
1122 constraint.SetMandatoryMinAspectRatio(requested_ratio); 1058 constraint.SetMandatoryMinAspectRatio(requested_ratio);
1123 SetVideoConstraints(constraint, constraint); 1059 SetVideoConstraints(constraint, constraint);
1124 LocalP2PTest(); 1060 LocalP2PTest();
1125 1061
1126 ASSERT_LE(0, initializing_client()->rendered_height()); 1062 ASSERT_LE(0, initializing_client()->rendered_height());
1127 double initiating_video_ratio = 1063 double initiating_video_ratio =
1128 static_cast<double>(initializing_client()->rendered_width()) / 1064 static_cast<double>(initializing_client()->rendered_width()) /
1129 initializing_client()->rendered_height(); 1065 initializing_client()->rendered_height();
1130 EXPECT_LE(requested_ratio, initiating_video_ratio); 1066 EXPECT_LE(requested_ratio, initiating_video_ratio);
1131 1067
1132 ASSERT_LE(0, receiving_client()->rendered_height()); 1068 ASSERT_LE(0, receiving_client()->rendered_height());
1133 double receiving_video_ratio = 1069 double receiving_video_ratio =
1134 static_cast<double>(receiving_client()->rendered_width()) / 1070 static_cast<double>(receiving_client()->rendered_width()) /
1135 receiving_client()->rendered_height(); 1071 receiving_client()->rendered_height();
1136 EXPECT_LE(requested_ratio, receiving_video_ratio); 1072 EXPECT_LE(requested_ratio, receiving_video_ratio);
1137 } 1073 }
1138 1074
1139 // This test sets up a Jsep call between two parties and test that the 1075 // This test sets up a Jsep call between two parties and test that the
1140 // received video has a resolution of 1280*720. 1076 // received video has a resolution of 1280*720.
1141 // TODO(mallinath): Enable when 1077 // TODO(mallinath): Enable when
1142 // http://code.google.com/p/webrtc/issues/detail?id=981 is fixed. 1078 // http://code.google.com/p/webrtc/issues/detail?id=981 is fixed.
1143 TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTest1280By720) { 1079 TEST_F(P2PTestConductor, DISABLED_LocalP2PTest1280By720) {
1144 ASSERT_TRUE(CreateTestClients()); 1080 ASSERT_TRUE(CreateTestClients());
1145 FakeConstraints constraint; 1081 FakeConstraints constraint;
1146 constraint.SetMandatoryMinWidth(1280); 1082 constraint.SetMandatoryMinWidth(1280);
1147 constraint.SetMandatoryMinHeight(720); 1083 constraint.SetMandatoryMinHeight(720);
1148 SetVideoConstraints(constraint, constraint); 1084 SetVideoConstraints(constraint, constraint);
1149 LocalP2PTest(); 1085 LocalP2PTest();
1150 VerifyRenderedSize(1280, 720); 1086 VerifyRenderedSize(1280, 720);
1151 } 1087 }
1152 1088
1153 // This test sets up a call between two endpoints that are configured to use 1089 // This test sets up a call between two endpoints that are configured to use
1154 // DTLS key agreement. As a result, DTLS is negotiated and used for transport. 1090 // DTLS key agreement. As a result, DTLS is negotiated and used for transport.
1155 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDtls) { 1091 TEST_F(P2PTestConductor, LocalP2PTestDtls) {
1156 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1092 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1157 FakeConstraints setup_constraints; 1093 FakeConstraints setup_constraints;
1158 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1094 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1159 true); 1095 true);
1160 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1096 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1161 LocalP2PTest(); 1097 LocalP2PTest();
1162 VerifyRenderedSize(640, 480); 1098 VerifyRenderedSize(640, 480);
1163 } 1099 }
1164 1100
1165 // This test sets up a audio call initially and then upgrades to audio/video, 1101 // This test sets up a audio call initially and then upgrades to audio/video,
1166 // using DTLS. 1102 // using DTLS.
1167 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDtlsRenegotiate) { 1103 TEST_F(P2PTestConductor, LocalP2PTestDtlsRenegotiate) {
1168 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1104 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1169 FakeConstraints setup_constraints; 1105 FakeConstraints setup_constraints;
1170 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1106 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1171 true); 1107 true);
1172 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1108 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1173 receiving_client()->SetReceiveAudioVideo(true, false); 1109 receiving_client()->SetReceiveAudioVideo(true, false);
1174 LocalP2PTest(); 1110 LocalP2PTest();
1175 receiving_client()->SetReceiveAudioVideo(true, true); 1111 receiving_client()->SetReceiveAudioVideo(true, true);
1176 receiving_client()->Negotiate(); 1112 receiving_client()->Negotiate();
1177 } 1113 }
1178 1114
1179 // This test sets up a call between two endpoints that are configured to use 1115 // This test sets up a call between two endpoints that are configured to use
1180 // DTLS key agreement. The offerer don't support SDES. As a result, DTLS is 1116 // DTLS key agreement. The offerer don't support SDES. As a result, DTLS is
1181 // negotiated and used for transport. 1117 // negotiated and used for transport.
1182 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestOfferDtlsButNotSdes) { 1118 TEST_F(P2PTestConductor, LocalP2PTestOfferDtlsButNotSdes) {
1183 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1119 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1184 FakeConstraints setup_constraints; 1120 FakeConstraints setup_constraints;
1185 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, 1121 setup_constraints.AddMandatory(MediaConstraintsInterface::kEnableDtlsSrtp,
1186 true); 1122 true);
1187 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1123 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1188 receiving_client()->RemoveSdesCryptoFromReceivedSdp(true); 1124 receiving_client()->RemoveSdesCryptoFromReceivedSdp(true);
1189 LocalP2PTest(); 1125 LocalP2PTest();
1190 VerifyRenderedSize(640, 480); 1126 VerifyRenderedSize(640, 480);
1191 } 1127 }
1192 1128
1193 // This test sets up a Jsep call between two parties, and the callee only 1129 // This test sets up a Jsep call between two parties, and the callee only
1194 // accept to receive video. 1130 // accept to receive video.
1195 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerVideo) { 1131 TEST_F(P2PTestConductor, LocalP2PTestAnswerVideo) {
1196 ASSERT_TRUE(CreateTestClients()); 1132 ASSERT_TRUE(CreateTestClients());
1197 receiving_client()->SetReceiveAudioVideo(false, true); 1133 receiving_client()->SetReceiveAudioVideo(false, true);
1198 LocalP2PTest(); 1134 LocalP2PTest();
1199 } 1135 }
1200 1136
1201 // This test sets up a Jsep call between two parties, and the callee only 1137 // This test sets up a Jsep call between two parties, and the callee only
1202 // accept to receive audio. 1138 // accept to receive audio.
1203 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerAudio) { 1139 TEST_F(P2PTestConductor, LocalP2PTestAnswerAudio) {
1204 ASSERT_TRUE(CreateTestClients()); 1140 ASSERT_TRUE(CreateTestClients());
1205 receiving_client()->SetReceiveAudioVideo(true, false); 1141 receiving_client()->SetReceiveAudioVideo(true, false);
1206 LocalP2PTest(); 1142 LocalP2PTest();
1207 } 1143 }
1208 1144
1209 // This test sets up a Jsep call between two parties, and the callee reject both 1145 // This test sets up a Jsep call between two parties, and the callee reject both
1210 // audio and video. 1146 // audio and video.
1211 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestAnswerNone) { 1147 TEST_F(P2PTestConductor, LocalP2PTestAnswerNone) {
1212 ASSERT_TRUE(CreateTestClients()); 1148 ASSERT_TRUE(CreateTestClients());
1213 receiving_client()->SetReceiveAudioVideo(false, false); 1149 receiving_client()->SetReceiveAudioVideo(false, false);
1214 LocalP2PTest(); 1150 LocalP2PTest();
1215 } 1151 }
1216 1152
1217 // This test sets up an audio and video call between two parties. After the call 1153 // This test sets up an audio and video call between two parties. After the call
1218 // runs for a while (10 frames), the caller sends an update offer with video 1154 // runs for a while (10 frames), the caller sends an update offer with video
1219 // being rejected. Once the re-negotiation is done, the video flow should stop 1155 // being rejected. Once the re-negotiation is done, the video flow should stop
1220 // and the audio flow should continue. 1156 // and the audio flow should continue.
1221 // Disabled due to b/14955157. 1157 // Disabled due to b/14955157.
1222 TEST_F(JsepPeerConnectionP2PTestClient, 1158 TEST_F(P2PTestConductor, DISABLED_UpdateOfferWithRejectedContent) {
1223 DISABLED_UpdateOfferWithRejectedContent) {
1224 ASSERT_TRUE(CreateTestClients()); 1159 ASSERT_TRUE(CreateTestClients());
1225 LocalP2PTest(); 1160 LocalP2PTest();
1226 TestUpdateOfferWithRejectedContent(); 1161 TestUpdateOfferWithRejectedContent();
1227 } 1162 }
1228 1163
1229 // This test sets up a Jsep call between two parties. The MSID is removed from 1164 // This test sets up a Jsep call between two parties. The MSID is removed from
1230 // the SDP strings from the caller. 1165 // the SDP strings from the caller.
1231 // Disabled due to b/14955157. 1166 // Disabled due to b/14955157.
1232 TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestWithoutMsid) { 1167 TEST_F(P2PTestConductor, DISABLED_LocalP2PTestWithoutMsid) {
1233 ASSERT_TRUE(CreateTestClients()); 1168 ASSERT_TRUE(CreateTestClients());
1234 receiving_client()->RemoveMsidFromReceivedSdp(true); 1169 receiving_client()->RemoveMsidFromReceivedSdp(true);
1235 // TODO(perkj): Currently there is a bug that cause audio to stop playing if 1170 // TODO(perkj): Currently there is a bug that cause audio to stop playing if
1236 // audio and video is muxed when MSID is disabled. Remove 1171 // audio and video is muxed when MSID is disabled. Remove
1237 // SetRemoveBundleFromSdp once 1172 // SetRemoveBundleFromSdp once
1238 // https://code.google.com/p/webrtc/issues/detail?id=1193 is fixed. 1173 // https://code.google.com/p/webrtc/issues/detail?id=1193 is fixed.
1239 receiving_client()->RemoveBundleFromReceivedSdp(true); 1174 receiving_client()->RemoveBundleFromReceivedSdp(true);
1240 LocalP2PTest(); 1175 LocalP2PTest();
1241 } 1176 }
1242 1177
1243 // This test sets up a Jsep call between two parties and the initiating peer 1178 // This test sets up a Jsep call between two parties and the initiating peer
1244 // sends two steams. 1179 // sends two steams.
1245 // TODO(perkj): Disabled due to 1180 // TODO(perkj): Disabled due to
1246 // https://code.google.com/p/webrtc/issues/detail?id=1454 1181 // https://code.google.com/p/webrtc/issues/detail?id=1454
1247 TEST_F(JsepPeerConnectionP2PTestClient, DISABLED_LocalP2PTestTwoStreams) { 1182 TEST_F(P2PTestConductor, DISABLED_LocalP2PTestTwoStreams) {
1248 ASSERT_TRUE(CreateTestClients()); 1183 ASSERT_TRUE(CreateTestClients());
1249 // Set optional video constraint to max 320pixels to decrease CPU usage. 1184 // Set optional video constraint to max 320pixels to decrease CPU usage.
1250 FakeConstraints constraint; 1185 FakeConstraints constraint;
1251 constraint.SetOptionalMaxWidth(320); 1186 constraint.SetOptionalMaxWidth(320);
1252 SetVideoConstraints(constraint, constraint); 1187 SetVideoConstraints(constraint, constraint);
1253 initializing_client()->AddMediaStream(true, true); 1188 initializing_client()->AddMediaStream(true, true);
1254 initializing_client()->AddMediaStream(false, true); 1189 initializing_client()->AddMediaStream(false, true);
1255 ASSERT_EQ(2u, initializing_client()->NumberOfLocalMediaStreams()); 1190 ASSERT_EQ(2u, initializing_client()->NumberOfLocalMediaStreams());
1256 LocalP2PTest(); 1191 LocalP2PTest();
1257 EXPECT_EQ(2u, receiving_client()->number_of_remote_streams()); 1192 EXPECT_EQ(2u, receiving_client()->number_of_remote_streams());
1258 } 1193 }
1259 1194
1260 // Test that we can receive the audio output level from a remote audio track. 1195 // Test that we can receive the audio output level from a remote audio track.
1261 TEST_F(JsepPeerConnectionP2PTestClient, GetAudioOutputLevelStats) { 1196 TEST_F(P2PTestConductor, GetAudioOutputLevelStats) {
1262 ASSERT_TRUE(CreateTestClients()); 1197 ASSERT_TRUE(CreateTestClients());
1263 LocalP2PTest(); 1198 LocalP2PTest();
1264 1199
1265 StreamCollectionInterface* remote_streams = 1200 StreamCollectionInterface* remote_streams =
1266 initializing_client()->remote_streams(); 1201 initializing_client()->remote_streams();
1267 ASSERT_GT(remote_streams->count(), 0u); 1202 ASSERT_GT(remote_streams->count(), 0u);
1268 ASSERT_GT(remote_streams->at(0)->GetAudioTracks().size(), 0u); 1203 ASSERT_GT(remote_streams->at(0)->GetAudioTracks().size(), 0u);
1269 MediaStreamTrackInterface* remote_audio_track = 1204 MediaStreamTrackInterface* remote_audio_track =
1270 remote_streams->at(0)->GetAudioTracks()[0]; 1205 remote_streams->at(0)->GetAudioTracks()[0];
1271 1206
1272 // Get the audio output level stats. Note that the level is not available 1207 // Get the audio output level stats. Note that the level is not available
1273 // until a RTCP packet has been received. 1208 // until a RTCP packet has been received.
1274 EXPECT_TRUE_WAIT( 1209 EXPECT_TRUE_WAIT(
1275 initializing_client()->GetAudioOutputLevelStats(remote_audio_track) > 0, 1210 initializing_client()->GetAudioOutputLevelStats(remote_audio_track) > 0,
1276 kMaxWaitForStatsMs); 1211 kMaxWaitForStatsMs);
1277 } 1212 }
1278 1213
1279 // Test that an audio input level is reported. 1214 // Test that an audio input level is reported.
1280 TEST_F(JsepPeerConnectionP2PTestClient, GetAudioInputLevelStats) { 1215 TEST_F(P2PTestConductor, GetAudioInputLevelStats) {
1281 ASSERT_TRUE(CreateTestClients()); 1216 ASSERT_TRUE(CreateTestClients());
1282 LocalP2PTest(); 1217 LocalP2PTest();
1283 1218
1284 // Get the audio input level stats. The level should be available very 1219 // Get the audio input level stats. The level should be available very
1285 // soon after the test starts. 1220 // soon after the test starts.
1286 EXPECT_TRUE_WAIT(initializing_client()->GetAudioInputLevelStats() > 0, 1221 EXPECT_TRUE_WAIT(initializing_client()->GetAudioInputLevelStats() > 0,
1287 kMaxWaitForStatsMs); 1222 kMaxWaitForStatsMs);
1288 } 1223 }
1289 1224
1290 // Test that we can get incoming byte counts from both audio and video tracks. 1225 // Test that we can get incoming byte counts from both audio and video tracks.
1291 TEST_F(JsepPeerConnectionP2PTestClient, GetBytesReceivedStats) { 1226 TEST_F(P2PTestConductor, GetBytesReceivedStats) {
1292 ASSERT_TRUE(CreateTestClients()); 1227 ASSERT_TRUE(CreateTestClients());
1293 LocalP2PTest(); 1228 LocalP2PTest();
1294 1229
1295 StreamCollectionInterface* remote_streams = 1230 StreamCollectionInterface* remote_streams =
1296 initializing_client()->remote_streams(); 1231 initializing_client()->remote_streams();
1297 ASSERT_GT(remote_streams->count(), 0u); 1232 ASSERT_GT(remote_streams->count(), 0u);
1298 ASSERT_GT(remote_streams->at(0)->GetAudioTracks().size(), 0u); 1233 ASSERT_GT(remote_streams->at(0)->GetAudioTracks().size(), 0u);
1299 MediaStreamTrackInterface* remote_audio_track = 1234 MediaStreamTrackInterface* remote_audio_track =
1300 remote_streams->at(0)->GetAudioTracks()[0]; 1235 remote_streams->at(0)->GetAudioTracks()[0];
1301 EXPECT_TRUE_WAIT( 1236 EXPECT_TRUE_WAIT(
1302 initializing_client()->GetBytesReceivedStats(remote_audio_track) > 0, 1237 initializing_client()->GetBytesReceivedStats(remote_audio_track) > 0,
1303 kMaxWaitForStatsMs); 1238 kMaxWaitForStatsMs);
1304 1239
1305 MediaStreamTrackInterface* remote_video_track = 1240 MediaStreamTrackInterface* remote_video_track =
1306 remote_streams->at(0)->GetVideoTracks()[0]; 1241 remote_streams->at(0)->GetVideoTracks()[0];
1307 EXPECT_TRUE_WAIT( 1242 EXPECT_TRUE_WAIT(
1308 initializing_client()->GetBytesReceivedStats(remote_video_track) > 0, 1243 initializing_client()->GetBytesReceivedStats(remote_video_track) > 0,
1309 kMaxWaitForStatsMs); 1244 kMaxWaitForStatsMs);
1310 } 1245 }
1311 1246
1312 // Test that we can get outgoing byte counts from both audio and video tracks. 1247 // Test that we can get outgoing byte counts from both audio and video tracks.
1313 TEST_F(JsepPeerConnectionP2PTestClient, GetBytesSentStats) { 1248 TEST_F(P2PTestConductor, GetBytesSentStats) {
1314 ASSERT_TRUE(CreateTestClients()); 1249 ASSERT_TRUE(CreateTestClients());
1315 LocalP2PTest(); 1250 LocalP2PTest();
1316 1251
1317 StreamCollectionInterface* local_streams = 1252 StreamCollectionInterface* local_streams =
1318 initializing_client()->local_streams(); 1253 initializing_client()->local_streams();
1319 ASSERT_GT(local_streams->count(), 0u); 1254 ASSERT_GT(local_streams->count(), 0u);
1320 ASSERT_GT(local_streams->at(0)->GetAudioTracks().size(), 0u); 1255 ASSERT_GT(local_streams->at(0)->GetAudioTracks().size(), 0u);
1321 MediaStreamTrackInterface* local_audio_track = 1256 MediaStreamTrackInterface* local_audio_track =
1322 local_streams->at(0)->GetAudioTracks()[0]; 1257 local_streams->at(0)->GetAudioTracks()[0];
1323 EXPECT_TRUE_WAIT( 1258 EXPECT_TRUE_WAIT(
1324 initializing_client()->GetBytesSentStats(local_audio_track) > 0, 1259 initializing_client()->GetBytesSentStats(local_audio_track) > 0,
1325 kMaxWaitForStatsMs); 1260 kMaxWaitForStatsMs);
1326 1261
1327 MediaStreamTrackInterface* local_video_track = 1262 MediaStreamTrackInterface* local_video_track =
1328 local_streams->at(0)->GetVideoTracks()[0]; 1263 local_streams->at(0)->GetVideoTracks()[0];
1329 EXPECT_TRUE_WAIT( 1264 EXPECT_TRUE_WAIT(
1330 initializing_client()->GetBytesSentStats(local_video_track) > 0, 1265 initializing_client()->GetBytesSentStats(local_video_track) > 0,
1331 kMaxWaitForStatsMs); 1266 kMaxWaitForStatsMs);
1332 } 1267 }
1333 1268
1334 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0. 1269 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0.
1335 TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12None) { 1270 TEST_F(P2PTestConductor, GetDtls12None) {
1336 PeerConnectionFactory::Options init_options; 1271 PeerConnectionFactory::Options init_options;
1337 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; 1272 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
1338 PeerConnectionFactory::Options recv_options; 1273 PeerConnectionFactory::Options recv_options;
1339 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; 1274 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
1340 ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options)); 1275 ASSERT_TRUE(
1276 CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
1341 rtc::scoped_refptr<webrtc::FakeMetricsObserver> 1277 rtc::scoped_refptr<webrtc::FakeMetricsObserver>
1342 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); 1278 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
1343 initializing_client()->pc()->RegisterUMAObserver(init_observer); 1279 initializing_client()->pc()->RegisterUMAObserver(init_observer);
1344 LocalP2PTest(); 1280 LocalP2PTest();
1345 1281
1346 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName( 1282 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName(
1347 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1283 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1348 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)), 1284 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)),
1349 initializing_client()->GetDtlsCipherStats(), 1285 initializing_client()->GetDtlsCipherStats(),
1350 kMaxWaitForStatsMs); 1286 kMaxWaitForStatsMs);
1351 EXPECT_EQ(1, init_observer->GetEnumCounter( 1287 EXPECT_EQ(1, init_observer->GetEnumCounter(
1352 webrtc::kEnumCounterAudioSslCipher, 1288 webrtc::kEnumCounterAudioSslCipher,
1353 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1289 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1354 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT))); 1290 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)));
1355 1291
1356 EXPECT_EQ_WAIT(kDefaultSrtpCipher, 1292 EXPECT_EQ_WAIT(kDefaultSrtpCipher,
1357 initializing_client()->GetSrtpCipherStats(), 1293 initializing_client()->GetSrtpCipherStats(),
1358 kMaxWaitForStatsMs); 1294 kMaxWaitForStatsMs);
1359 EXPECT_EQ(1, init_observer->GetEnumCounter( 1295 EXPECT_EQ(1, init_observer->GetEnumCounter(
1360 webrtc::kEnumCounterAudioSrtpCipher, 1296 webrtc::kEnumCounterAudioSrtpCipher,
1361 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher))); 1297 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher)));
1362 } 1298 }
1363 1299
1364 // Test that DTLS 1.2 is used if both ends support it. 1300 // Test that DTLS 1.2 is used if both ends support it.
1365 TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Both) { 1301 TEST_F(P2PTestConductor, GetDtls12Both) {
1366 PeerConnectionFactory::Options init_options; 1302 PeerConnectionFactory::Options init_options;
1367 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; 1303 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
1368 PeerConnectionFactory::Options recv_options; 1304 PeerConnectionFactory::Options recv_options;
1369 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; 1305 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
1370 ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options)); 1306 ASSERT_TRUE(
1307 CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
1371 rtc::scoped_refptr<webrtc::FakeMetricsObserver> 1308 rtc::scoped_refptr<webrtc::FakeMetricsObserver>
1372 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); 1309 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
1373 initializing_client()->pc()->RegisterUMAObserver(init_observer); 1310 initializing_client()->pc()->RegisterUMAObserver(init_observer);
1374 LocalP2PTest(); 1311 LocalP2PTest();
1375 1312
1376 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName( 1313 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName(
1377 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1314 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1378 rtc::SSL_PROTOCOL_DTLS_12, rtc::KT_DEFAULT)), 1315 rtc::SSL_PROTOCOL_DTLS_12, rtc::KT_DEFAULT)),
1379 initializing_client()->GetDtlsCipherStats(), 1316 initializing_client()->GetDtlsCipherStats(),
1380 kMaxWaitForStatsMs); 1317 kMaxWaitForStatsMs);
1381 EXPECT_EQ(1, init_observer->GetEnumCounter( 1318 EXPECT_EQ(1, init_observer->GetEnumCounter(
1382 webrtc::kEnumCounterAudioSslCipher, 1319 webrtc::kEnumCounterAudioSslCipher,
1383 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1320 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1384 rtc::SSL_PROTOCOL_DTLS_12, rtc::KT_DEFAULT))); 1321 rtc::SSL_PROTOCOL_DTLS_12, rtc::KT_DEFAULT)));
1385 1322
1386 EXPECT_EQ_WAIT(kDefaultSrtpCipher, 1323 EXPECT_EQ_WAIT(kDefaultSrtpCipher,
1387 initializing_client()->GetSrtpCipherStats(), 1324 initializing_client()->GetSrtpCipherStats(),
1388 kMaxWaitForStatsMs); 1325 kMaxWaitForStatsMs);
1389 EXPECT_EQ(1, init_observer->GetEnumCounter( 1326 EXPECT_EQ(1, init_observer->GetEnumCounter(
1390 webrtc::kEnumCounterAudioSrtpCipher, 1327 webrtc::kEnumCounterAudioSrtpCipher,
1391 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher))); 1328 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher)));
1392 } 1329 }
1393 1330
1394 // Test that DTLS 1.0 is used if the initator supports DTLS 1.2 and the 1331 // Test that DTLS 1.0 is used if the initator supports DTLS 1.2 and the
1395 // received supports 1.0. 1332 // received supports 1.0.
1396 TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Init) { 1333 TEST_F(P2PTestConductor, GetDtls12Init) {
1397 PeerConnectionFactory::Options init_options; 1334 PeerConnectionFactory::Options init_options;
1398 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; 1335 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
1399 PeerConnectionFactory::Options recv_options; 1336 PeerConnectionFactory::Options recv_options;
1400 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; 1337 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
1401 ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options)); 1338 ASSERT_TRUE(
1339 CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
1402 rtc::scoped_refptr<webrtc::FakeMetricsObserver> 1340 rtc::scoped_refptr<webrtc::FakeMetricsObserver>
1403 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); 1341 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
1404 initializing_client()->pc()->RegisterUMAObserver(init_observer); 1342 initializing_client()->pc()->RegisterUMAObserver(init_observer);
1405 LocalP2PTest(); 1343 LocalP2PTest();
1406 1344
1407 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName( 1345 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName(
1408 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1346 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1409 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)), 1347 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)),
1410 initializing_client()->GetDtlsCipherStats(), 1348 initializing_client()->GetDtlsCipherStats(),
1411 kMaxWaitForStatsMs); 1349 kMaxWaitForStatsMs);
1412 EXPECT_EQ(1, init_observer->GetEnumCounter( 1350 EXPECT_EQ(1, init_observer->GetEnumCounter(
1413 webrtc::kEnumCounterAudioSslCipher, 1351 webrtc::kEnumCounterAudioSslCipher,
1414 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1352 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1415 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT))); 1353 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)));
1416 1354
1417 EXPECT_EQ_WAIT(kDefaultSrtpCipher, 1355 EXPECT_EQ_WAIT(kDefaultSrtpCipher,
1418 initializing_client()->GetSrtpCipherStats(), 1356 initializing_client()->GetSrtpCipherStats(),
1419 kMaxWaitForStatsMs); 1357 kMaxWaitForStatsMs);
1420 EXPECT_EQ(1, init_observer->GetEnumCounter( 1358 EXPECT_EQ(1, init_observer->GetEnumCounter(
1421 webrtc::kEnumCounterAudioSrtpCipher, 1359 webrtc::kEnumCounterAudioSrtpCipher,
1422 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher))); 1360 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher)));
1423 } 1361 }
1424 1362
1425 // Test that DTLS 1.0 is used if the initator supports DTLS 1.0 and the 1363 // Test that DTLS 1.0 is used if the initator supports DTLS 1.0 and the
1426 // received supports 1.2. 1364 // received supports 1.2.
1427 TEST_F(JsepPeerConnectionP2PTestClient, GetDtls12Recv) { 1365 TEST_F(P2PTestConductor, GetDtls12Recv) {
1428 PeerConnectionFactory::Options init_options; 1366 PeerConnectionFactory::Options init_options;
1429 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; 1367 init_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
1430 PeerConnectionFactory::Options recv_options; 1368 PeerConnectionFactory::Options recv_options;
1431 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12; 1369 recv_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
1432 ASSERT_TRUE(CreateTestClients(NULL, &init_options, NULL, &recv_options)); 1370 ASSERT_TRUE(
1371 CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
1433 rtc::scoped_refptr<webrtc::FakeMetricsObserver> 1372 rtc::scoped_refptr<webrtc::FakeMetricsObserver>
1434 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>(); 1373 init_observer = new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
1435 initializing_client()->pc()->RegisterUMAObserver(init_observer); 1374 initializing_client()->pc()->RegisterUMAObserver(init_observer);
1436 LocalP2PTest(); 1375 LocalP2PTest();
1437 1376
1438 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName( 1377 EXPECT_EQ_WAIT(rtc::SSLStreamAdapter::GetSslCipherSuiteName(
1439 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1378 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1440 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)), 1379 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)),
1441 initializing_client()->GetDtlsCipherStats(), 1380 initializing_client()->GetDtlsCipherStats(),
1442 kMaxWaitForStatsMs); 1381 kMaxWaitForStatsMs);
1443 EXPECT_EQ(1, init_observer->GetEnumCounter( 1382 EXPECT_EQ(1, init_observer->GetEnumCounter(
1444 webrtc::kEnumCounterAudioSslCipher, 1383 webrtc::kEnumCounterAudioSslCipher,
1445 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( 1384 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest(
1446 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT))); 1385 rtc::SSL_PROTOCOL_DTLS_10, rtc::KT_DEFAULT)));
1447 1386
1448 EXPECT_EQ_WAIT(kDefaultSrtpCipher, 1387 EXPECT_EQ_WAIT(kDefaultSrtpCipher,
1449 initializing_client()->GetSrtpCipherStats(), 1388 initializing_client()->GetSrtpCipherStats(),
1450 kMaxWaitForStatsMs); 1389 kMaxWaitForStatsMs);
1451 EXPECT_EQ(1, init_observer->GetEnumCounter( 1390 EXPECT_EQ(1, init_observer->GetEnumCounter(
1452 webrtc::kEnumCounterAudioSrtpCipher, 1391 webrtc::kEnumCounterAudioSrtpCipher,
1453 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher))); 1392 rtc::GetSrtpCryptoSuiteFromName(kDefaultSrtpCipher)));
1454 } 1393 }
1455 1394
1456 // This test sets up a call between two parties with audio, video and data. 1395 // This test sets up a call between two parties with audio, video and data.
1457 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestDataChannel) { 1396 TEST_F(P2PTestConductor, LocalP2PTestDataChannel) {
1458 FakeConstraints setup_constraints; 1397 FakeConstraints setup_constraints;
1459 setup_constraints.SetAllowRtpDataChannels(); 1398 setup_constraints.SetAllowRtpDataChannels();
1460 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1399 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1461 initializing_client()->CreateDataChannel(); 1400 initializing_client()->CreateDataChannel();
1462 LocalP2PTest(); 1401 LocalP2PTest();
1463 ASSERT_TRUE(initializing_client()->data_channel() != NULL); 1402 ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
1464 ASSERT_TRUE(receiving_client()->data_channel() != NULL); 1403 ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
1465 EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(), 1404 EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
1466 kMaxWaitMs); 1405 kMaxWaitMs);
1467 EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(), 1406 EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(),
1468 kMaxWaitMs); 1407 kMaxWaitMs);
1469 1408
1470 std::string data = "hello world"; 1409 std::string data = "hello world";
1471 1410
1472 SendRtpData(initializing_client()->data_channel(), data); 1411 SendRtpData(initializing_client()->data_channel(), data);
1473 EXPECT_EQ_WAIT(data, receiving_client()->data_observer()->last_message(), 1412 EXPECT_EQ_WAIT(data, receiving_client()->data_observer()->last_message(),
1474 kMaxWaitMs); 1413 kMaxWaitMs);
1475 1414
1476 SendRtpData(receiving_client()->data_channel(), data); 1415 SendRtpData(receiving_client()->data_channel(), data);
1477 EXPECT_EQ_WAIT(data, initializing_client()->data_observer()->last_message(), 1416 EXPECT_EQ_WAIT(data, initializing_client()->data_observer()->last_message(),
1478 kMaxWaitMs); 1417 kMaxWaitMs);
1479 1418
1480 receiving_client()->data_channel()->Close(); 1419 receiving_client()->data_channel()->Close();
1481 // Send new offer and answer. 1420 // Send new offer and answer.
1482 receiving_client()->Negotiate(); 1421 receiving_client()->Negotiate();
1483 EXPECT_FALSE(initializing_client()->data_observer()->IsOpen()); 1422 EXPECT_FALSE(initializing_client()->data_observer()->IsOpen());
1484 EXPECT_FALSE(receiving_client()->data_observer()->IsOpen()); 1423 EXPECT_FALSE(receiving_client()->data_observer()->IsOpen());
1485 } 1424 }
1486 1425
1487 // This test sets up a call between two parties and creates a data channel. 1426 // This test sets up a call between two parties and creates a data channel.
1488 // The test tests that received data is buffered unless an observer has been 1427 // The test tests that received data is buffered unless an observer has been
1489 // registered. 1428 // registered.
1490 // Rtp data channels can receive data before the underlying 1429 // Rtp data channels can receive data before the underlying
1491 // transport has detected that a channel is writable and thus data can be 1430 // transport has detected that a channel is writable and thus data can be
1492 // received before the data channel state changes to open. That is hard to test 1431 // received before the data channel state changes to open. That is hard to test
1493 // but the same buffering is used in that case. 1432 // but the same buffering is used in that case.
1494 TEST_F(JsepPeerConnectionP2PTestClient, RegisterDataChannelObserver) { 1433 TEST_F(P2PTestConductor, RegisterDataChannelObserver) {
1495 FakeConstraints setup_constraints; 1434 FakeConstraints setup_constraints;
1496 setup_constraints.SetAllowRtpDataChannels(); 1435 setup_constraints.SetAllowRtpDataChannels();
1497 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1436 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1498 initializing_client()->CreateDataChannel(); 1437 initializing_client()->CreateDataChannel();
1499 initializing_client()->Negotiate(); 1438 initializing_client()->Negotiate();
1500 1439
1501 ASSERT_TRUE(initializing_client()->data_channel() != NULL); 1440 ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
1502 ASSERT_TRUE(receiving_client()->data_channel() != NULL); 1441 ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
1503 EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(), 1442 EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
1504 kMaxWaitMs); 1443 kMaxWaitMs);
1505 EXPECT_EQ_WAIT(DataChannelInterface::kOpen, 1444 EXPECT_EQ_WAIT(DataChannelInterface::kOpen,
1506 receiving_client()->data_channel()->state(), kMaxWaitMs); 1445 receiving_client()->data_channel()->state(), kMaxWaitMs);
1507 1446
1508 // Unregister the existing observer. 1447 // Unregister the existing observer.
1509 receiving_client()->data_channel()->UnregisterObserver(); 1448 receiving_client()->data_channel()->UnregisterObserver();
1510 1449
1511 std::string data = "hello world"; 1450 std::string data = "hello world";
1512 SendRtpData(initializing_client()->data_channel(), data); 1451 SendRtpData(initializing_client()->data_channel(), data);
1513 1452
1514 // Wait a while to allow the sent data to arrive before an observer is 1453 // Wait a while to allow the sent data to arrive before an observer is
1515 // registered.. 1454 // registered..
1516 rtc::Thread::Current()->ProcessMessages(100); 1455 rtc::Thread::Current()->ProcessMessages(100);
1517 1456
1518 MockDataChannelObserver new_observer(receiving_client()->data_channel()); 1457 MockDataChannelObserver new_observer(receiving_client()->data_channel());
1519 EXPECT_EQ_WAIT(data, new_observer.last_message(), kMaxWaitMs); 1458 EXPECT_EQ_WAIT(data, new_observer.last_message(), kMaxWaitMs);
1520 } 1459 }
1521 1460
1522 // This test sets up a call between two parties with audio, video and but only 1461 // This test sets up a call between two parties with audio, video and but only
1523 // the initiating client support data. 1462 // the initiating client support data.
1524 TEST_F(JsepPeerConnectionP2PTestClient, LocalP2PTestReceiverDoesntSupportData) { 1463 TEST_F(P2PTestConductor, LocalP2PTestReceiverDoesntSupportData) {
1525 FakeConstraints setup_constraints_1; 1464 FakeConstraints setup_constraints_1;
1526 setup_constraints_1.SetAllowRtpDataChannels(); 1465 setup_constraints_1.SetAllowRtpDataChannels();
1527 // Must disable DTLS to make negotiation succeed. 1466 // Must disable DTLS to make negotiation succeed.
1528 setup_constraints_1.SetMandatory( 1467 setup_constraints_1.SetMandatory(
1529 MediaConstraintsInterface::kEnableDtlsSrtp, false); 1468 MediaConstraintsInterface::kEnableDtlsSrtp, false);
1530 FakeConstraints setup_constraints_2; 1469 FakeConstraints setup_constraints_2;
1531 setup_constraints_2.SetMandatory( 1470 setup_constraints_2.SetMandatory(
1532 MediaConstraintsInterface::kEnableDtlsSrtp, false); 1471 MediaConstraintsInterface::kEnableDtlsSrtp, false);
1533 ASSERT_TRUE(CreateTestClients(&setup_constraints_1, &setup_constraints_2)); 1472 ASSERT_TRUE(CreateTestClients(&setup_constraints_1, &setup_constraints_2));
1534 initializing_client()->CreateDataChannel(); 1473 initializing_client()->CreateDataChannel();
1535 LocalP2PTest(); 1474 LocalP2PTest();
1536 EXPECT_TRUE(initializing_client()->data_channel() != NULL); 1475 EXPECT_TRUE(initializing_client()->data_channel() != nullptr);
1537 EXPECT_FALSE(receiving_client()->data_channel()); 1476 EXPECT_FALSE(receiving_client()->data_channel());
1538 EXPECT_FALSE(initializing_client()->data_observer()->IsOpen()); 1477 EXPECT_FALSE(initializing_client()->data_observer()->IsOpen());
1539 } 1478 }
1540 1479
1541 // This test sets up a call between two parties with audio, video. When audio 1480 // This test sets up a call between two parties with audio, video. When audio
1542 // and video is setup and flowing and data channel is negotiated. 1481 // and video is setup and flowing and data channel is negotiated.
1543 TEST_F(JsepPeerConnectionP2PTestClient, AddDataChannelAfterRenegotiation) { 1482 TEST_F(P2PTestConductor, AddDataChannelAfterRenegotiation) {
1544 FakeConstraints setup_constraints; 1483 FakeConstraints setup_constraints;
1545 setup_constraints.SetAllowRtpDataChannels(); 1484 setup_constraints.SetAllowRtpDataChannels();
1546 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1485 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1547 LocalP2PTest(); 1486 LocalP2PTest();
1548 initializing_client()->CreateDataChannel(); 1487 initializing_client()->CreateDataChannel();
1549 // Send new offer and answer. 1488 // Send new offer and answer.
1550 initializing_client()->Negotiate(); 1489 initializing_client()->Negotiate();
1551 ASSERT_TRUE(initializing_client()->data_channel() != NULL); 1490 ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
1552 ASSERT_TRUE(receiving_client()->data_channel() != NULL); 1491 ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
1553 EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(), 1492 EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
1554 kMaxWaitMs); 1493 kMaxWaitMs);
1555 EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(), 1494 EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(),
1556 kMaxWaitMs); 1495 kMaxWaitMs);
1557 } 1496 }
1558 1497
1559 // This test sets up a Jsep call with SCTP DataChannel and verifies the 1498 // This test sets up a Jsep call with SCTP DataChannel and verifies the
1560 // negotiation is completed without error. 1499 // negotiation is completed without error.
1561 #ifdef HAVE_SCTP 1500 #ifdef HAVE_SCTP
1562 TEST_F(JsepPeerConnectionP2PTestClient, CreateOfferWithSctpDataChannel) { 1501 TEST_F(P2PTestConductor, CreateOfferWithSctpDataChannel) {
1563 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1502 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1564 FakeConstraints constraints; 1503 FakeConstraints constraints;
1565 constraints.SetMandatory( 1504 constraints.SetMandatory(
1566 MediaConstraintsInterface::kEnableDtlsSrtp, true); 1505 MediaConstraintsInterface::kEnableDtlsSrtp, true);
1567 ASSERT_TRUE(CreateTestClients(&constraints, &constraints)); 1506 ASSERT_TRUE(CreateTestClients(&constraints, &constraints));
1568 initializing_client()->CreateDataChannel(); 1507 initializing_client()->CreateDataChannel();
1569 initializing_client()->Negotiate(false, false); 1508 initializing_client()->Negotiate(false, false);
1570 } 1509 }
1571 #endif 1510 #endif
1572 1511
1573 // This test sets up a call between two parties with audio, and video. 1512 // This test sets up a call between two parties with audio, and video.
1574 // During the call, the initializing side restart ice and the test verifies that 1513 // During the call, the initializing side restart ice and the test verifies that
1575 // new ice candidates are generated and audio and video still can flow. 1514 // new ice candidates are generated and audio and video still can flow.
1576 TEST_F(JsepPeerConnectionP2PTestClient, IceRestart) { 1515 TEST_F(P2PTestConductor, IceRestart) {
1577 ASSERT_TRUE(CreateTestClients()); 1516 ASSERT_TRUE(CreateTestClients());
1578 1517
1579 // Negotiate and wait for ice completion and make sure audio and video plays. 1518 // Negotiate and wait for ice completion and make sure audio and video plays.
1580 LocalP2PTest(); 1519 LocalP2PTest();
1581 1520
1582 // Create a SDP string of the first audio candidate for both clients. 1521 // Create a SDP string of the first audio candidate for both clients.
1583 const webrtc::IceCandidateCollection* audio_candidates_initiator = 1522 const webrtc::IceCandidateCollection* audio_candidates_initiator =
1584 initializing_client()->pc()->local_description()->candidates(0); 1523 initializing_client()->pc()->local_description()->candidates(0);
1585 const webrtc::IceCandidateCollection* audio_candidates_receiver = 1524 const webrtc::IceCandidateCollection* audio_candidates_receiver =
1586 receiving_client()->pc()->local_description()->candidates(0); 1525 receiving_client()->pc()->local_description()->candidates(0);
(...skipping 30 matching lines...) Expand all
1617 // Verify that the first candidates in the local session descriptions has 1556 // Verify that the first candidates in the local session descriptions has
1618 // changed. 1557 // changed.
1619 EXPECT_NE(initiator_candidate, initiator_candidate_restart); 1558 EXPECT_NE(initiator_candidate, initiator_candidate_restart);
1620 EXPECT_NE(receiver_candidate, receiver_candidate_restart); 1559 EXPECT_NE(receiver_candidate, receiver_candidate_restart);
1621 } 1560 }
1622 1561
1623 // This test sets up a Jsep call between two parties with external 1562 // This test sets up a Jsep call between two parties with external
1624 // VideoDecoderFactory. 1563 // VideoDecoderFactory.
1625 // TODO(holmer): Disabled due to sometimes crashing on buildbots. 1564 // TODO(holmer): Disabled due to sometimes crashing on buildbots.
1626 // See issue webrtc/2378. 1565 // See issue webrtc/2378.
1627 TEST_F(JsepPeerConnectionP2PTestClient, 1566 TEST_F(P2PTestConductor, DISABLED_LocalP2PTestWithVideoDecoderFactory) {
1628 DISABLED_LocalP2PTestWithVideoDecoderFactory) {
1629 ASSERT_TRUE(CreateTestClients()); 1567 ASSERT_TRUE(CreateTestClients());
1630 EnableVideoDecoderFactory(); 1568 EnableVideoDecoderFactory();
1631 LocalP2PTest(); 1569 LocalP2PTest();
1632 } 1570 }
1633 1571
1634 class IceServerParsingTest : public testing::Test { 1572 class IceServerParsingTest : public testing::Test {
1635 public: 1573 public:
1636 // Convenience for parsing a single URL. 1574 // Convenience for parsing a single URL.
1637 bool ParseUrl(const std::string& url) { 1575 bool ParseUrl(const std::string& url) {
1638 return ParseUrl(url, std::string(), std::string()); 1576 return ParseUrl(url, std::string(), std::string());
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1801 server.urls.push_back("stun:hostname"); 1739 server.urls.push_back("stun:hostname");
1802 server.urls.push_back("turn:hostname"); 1740 server.urls.push_back("turn:hostname");
1803 servers.push_back(server); 1741 servers.push_back(server);
1804 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_configurations_, 1742 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_configurations_,
1805 &turn_configurations_)); 1743 &turn_configurations_));
1806 EXPECT_EQ(1U, stun_configurations_.size()); 1744 EXPECT_EQ(1U, stun_configurations_.size());
1807 EXPECT_EQ(1U, turn_configurations_.size()); 1745 EXPECT_EQ(1U, turn_configurations_.size());
1808 } 1746 }
1809 1747
1810 #endif // if !defined(THREAD_SANITIZER) 1748 #endif // if !defined(THREAD_SANITIZER)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698