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

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

Issue 1246913005: TransportController refactoring (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixed bugs with ICE connection state that occur when destroying transports Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * 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,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote products 13 * 3. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission. 14 * derived from this software without specific prior written permission.
15 * 15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28 #include <vector>
29
28 #include "talk/app/webrtc/audiotrack.h" 30 #include "talk/app/webrtc/audiotrack.h"
29 #include "talk/app/webrtc/fakemetricsobserver.h" 31 #include "talk/app/webrtc/fakemetricsobserver.h"
30 #include "talk/app/webrtc/jsepicecandidate.h" 32 #include "talk/app/webrtc/jsepicecandidate.h"
31 #include "talk/app/webrtc/jsepsessiondescription.h" 33 #include "talk/app/webrtc/jsepsessiondescription.h"
32 #include "talk/app/webrtc/mediastreamsignaling.h" 34 #include "talk/app/webrtc/mediastreamsignaling.h"
33 #include "talk/app/webrtc/streamcollection.h" 35 #include "talk/app/webrtc/streamcollection.h"
34 #include "talk/app/webrtc/test/fakeconstraints.h" 36 #include "talk/app/webrtc/test/fakeconstraints.h"
35 #include "talk/app/webrtc/test/fakedtlsidentitystore.h" 37 #include "talk/app/webrtc/test/fakedtlsidentitystore.h"
36 #include "talk/app/webrtc/test/fakemediastreamsignaling.h" 38 #include "talk/app/webrtc/test/fakemediastreamsignaling.h"
37 #include "talk/app/webrtc/videotrack.h" 39 #include "talk/app/webrtc/videotrack.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 "a=rtpmap:96 rtx/90000\r\n" 158 "a=rtpmap:96 rtx/90000\r\n"
157 "a=fmtp:96 apt=0\r\n"; 159 "a=fmtp:96 apt=0\r\n";
158 160
159 enum RTCCertificateGenerationMethod { ALREADY_GENERATED, DTLS_IDENTITY_STORE }; 161 enum RTCCertificateGenerationMethod { ALREADY_GENERATED, DTLS_IDENTITY_STORE };
160 162
161 // Add some extra |newlines| to the |message| after |line|. 163 // Add some extra |newlines| to the |message| after |line|.
162 static void InjectAfter(const std::string& line, 164 static void InjectAfter(const std::string& line,
163 const std::string& newlines, 165 const std::string& newlines,
164 std::string* message) { 166 std::string* message) {
165 const std::string tmp = line + newlines; 167 const std::string tmp = line + newlines;
166 rtc::replace_substrs(line.c_str(), line.length(), 168 rtc::replace_substrs(line.c_str(), line.length(), tmp.c_str(), tmp.length(),
167 tmp.c_str(), tmp.length(), message); 169 message);
168 } 170 }
169 171
170 class MockIceObserver : public webrtc::IceObserver { 172 class MockIceObserver : public webrtc::IceObserver {
171 public: 173 public:
172 MockIceObserver() 174 MockIceObserver()
173 : oncandidatesready_(false), 175 : oncandidatesready_(false),
174 ice_connection_state_(PeerConnectionInterface::kIceConnectionNew), 176 ice_connection_state_(PeerConnectionInterface::kIceConnectionNew),
175 ice_gathering_state_(PeerConnectionInterface::kIceGatheringNew) { 177 ice_gathering_state_(PeerConnectionInterface::kIceGatheringNew) {
176 } 178 }
177 179
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 rtc::Thread* worker_thread, 239 rtc::Thread* worker_thread,
238 cricket::PortAllocator* port_allocator, 240 cricket::PortAllocator* port_allocator,
239 webrtc::IceObserver* ice_observer, 241 webrtc::IceObserver* ice_observer,
240 webrtc::MediaStreamSignaling* mediastream_signaling) 242 webrtc::MediaStreamSignaling* mediastream_signaling)
241 : WebRtcSession(cmgr, signaling_thread, worker_thread, port_allocator, 243 : WebRtcSession(cmgr, signaling_thread, worker_thread, port_allocator,
242 mediastream_signaling) { 244 mediastream_signaling) {
243 RegisterIceObserver(ice_observer); 245 RegisterIceObserver(ice_observer);
244 } 246 }
245 virtual ~WebRtcSessionForTest() {} 247 virtual ~WebRtcSessionForTest() {}
246 248
247 using cricket::BaseSession::GetTransportProxy; 249 // Note that these methods are only safe to use if the signaling thread
250 // is the same as the worker thread
251 cricket::TransportChannel* voice_rtp_transport_channel() {
252 return rtp_transport_channel(voice_channel());
253 }
254
255 cricket::TransportChannel* voice_rtcp_transport_channel() {
256 return rtcp_transport_channel(voice_channel());
257 }
258
259 cricket::TransportChannel* video_rtp_transport_channel() {
260 return rtp_transport_channel(video_channel());
261 }
262
263 cricket::TransportChannel* video_rtcp_transport_channel() {
264 return rtcp_transport_channel(video_channel());
265 }
266
267 cricket::TransportChannel* data_rtp_transport_channel() {
268 return rtp_transport_channel(data_channel());
269 }
270
271 cricket::TransportChannel* data_rtcp_transport_channel() {
272 return rtcp_transport_channel(data_channel());
273 }
274
248 using webrtc::WebRtcSession::SetAudioPlayout; 275 using webrtc::WebRtcSession::SetAudioPlayout;
249 using webrtc::WebRtcSession::SetAudioSend; 276 using webrtc::WebRtcSession::SetAudioSend;
250 using webrtc::WebRtcSession::SetCaptureDevice; 277 using webrtc::WebRtcSession::SetCaptureDevice;
251 using webrtc::WebRtcSession::SetVideoPlayout; 278 using webrtc::WebRtcSession::SetVideoPlayout;
252 using webrtc::WebRtcSession::SetVideoSend; 279 using webrtc::WebRtcSession::SetVideoSend;
280
281 private:
282 cricket::TransportChannel* rtp_transport_channel(cricket::BaseChannel* ch) {
283 if (!ch) {
284 return nullptr;
285 }
286 return ch->transport_channel();
287 }
288
289 cricket::TransportChannel* rtcp_transport_channel(cricket::BaseChannel* ch) {
290 if (!ch) {
291 return nullptr;
292 }
293 return ch->rtcp_transport_channel();
294 }
253 }; 295 };
254 296
255 class WebRtcSessionCreateSDPObserverForTest 297 class WebRtcSessionCreateSDPObserverForTest
256 : public rtc::RefCountedObject<CreateSessionDescriptionObserver> { 298 : public rtc::RefCountedObject<CreateSessionDescriptionObserver> {
257 public: 299 public:
258 enum State { 300 enum State {
259 kInit, 301 kInit,
260 kFailed, 302 kFailed,
261 kSucceeded, 303 kSucceeded,
262 }; 304 };
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 channel_manager_.get(), rtc::Thread::Current(), 410 channel_manager_.get(), rtc::Thread::Current(),
369 rtc::Thread::Current(), allocator_.get(), 411 rtc::Thread::Current(), allocator_.get(),
370 &observer_, 412 &observer_,
371 &mediastream_signaling_)); 413 &mediastream_signaling_));
372 414
373 EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew, 415 EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew,
374 observer_.ice_connection_state_); 416 observer_.ice_connection_state_);
375 EXPECT_EQ(PeerConnectionInterface::kIceGatheringNew, 417 EXPECT_EQ(PeerConnectionInterface::kIceGatheringNew,
376 observer_.ice_gathering_state_); 418 observer_.ice_gathering_state_);
377 419
378 EXPECT_TRUE(session_->Initialize( 420 EXPECT_TRUE(session_->Initialize(options_, constraints_.get(),
379 options_, constraints_.get(), dtls_identity_store.Pass(), 421 dtls_identity_store.Pass(),
380 rtc_configuration)); 422 rtc_configuration));
381 session_->set_metrics_observer(metrics_observer_); 423 session_->set_metrics_observer(metrics_observer_);
382 } 424 }
383 425
384 void Init() { 426 void Init() {
385 PeerConnectionInterface::RTCConfiguration configuration; 427 PeerConnectionInterface::RTCConfiguration configuration;
386 Init(nullptr, configuration); 428 Init(nullptr, configuration);
387 } 429 }
388 430
389 void InitWithIceTransport( 431 void InitWithIceTransport(
390 PeerConnectionInterface::IceTransportsType ice_transport_type) { 432 PeerConnectionInterface::IceTransportsType ice_transport_type) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 observer->state() != WebRtcSessionCreateSDPObserverForTest::kInit, 525 observer->state() != WebRtcSessionCreateSDPObserverForTest::kInit,
484 2000); 526 2000);
485 return observer->ReleaseDescription(); 527 return observer->ReleaseDescription();
486 } 528 }
487 529
488 bool ChannelsExist() const { 530 bool ChannelsExist() const {
489 return (session_->voice_channel() != NULL && 531 return (session_->voice_channel() != NULL &&
490 session_->video_channel() != NULL); 532 session_->video_channel() != NULL);
491 } 533 }
492 534
493 void CheckTransportChannels() const {
494 EXPECT_TRUE(session_->GetChannel(cricket::CN_AUDIO, 1) != NULL);
495 EXPECT_TRUE(session_->GetChannel(cricket::CN_AUDIO, 2) != NULL);
496 EXPECT_TRUE(session_->GetChannel(cricket::CN_VIDEO, 1) != NULL);
497 EXPECT_TRUE(session_->GetChannel(cricket::CN_VIDEO, 2) != NULL);
498 }
499
500 void VerifyCryptoParams(const cricket::SessionDescription* sdp) { 535 void VerifyCryptoParams(const cricket::SessionDescription* sdp) {
501 ASSERT_TRUE(session_.get() != NULL); 536 ASSERT_TRUE(session_.get() != NULL);
502 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); 537 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp);
503 ASSERT_TRUE(content != NULL); 538 ASSERT_TRUE(content != NULL);
504 const cricket::AudioContentDescription* audio_content = 539 const cricket::AudioContentDescription* audio_content =
505 static_cast<const cricket::AudioContentDescription*>( 540 static_cast<const cricket::AudioContentDescription*>(
506 content->description); 541 content->description);
507 ASSERT_TRUE(audio_content != NULL); 542 ASSERT_TRUE(audio_content != NULL);
508 ASSERT_EQ(1U, audio_content->cryptos().size()); 543 ASSERT_EQ(1U, audio_content->cryptos().size());
509 ASSERT_EQ(47U, audio_content->cryptos()[0].key_params.size()); 544 ASSERT_EQ(47U, audio_content->cryptos()[0].key_params.size());
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 &sdp); 997 &sdp);
963 } 998 }
964 999
965 SessionDescriptionInterface* new_answer = CreateSessionDescription( 1000 SessionDescriptionInterface* new_answer = CreateSessionDescription(
966 JsepSessionDescription::kAnswer, sdp, NULL); 1001 JsepSessionDescription::kAnswer, sdp, NULL);
967 1002
968 // SetRemoteDescription to enable rtcp mux. 1003 // SetRemoteDescription to enable rtcp mux.
969 SetRemoteDescriptionWithoutError(new_answer); 1004 SetRemoteDescriptionWithoutError(new_answer);
970 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); 1005 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout);
971 EXPECT_EQ(expected_candidate_num, observer_.mline_0_candidates_.size()); 1006 EXPECT_EQ(expected_candidate_num, observer_.mline_0_candidates_.size());
972 EXPECT_EQ(expected_candidate_num, observer_.mline_1_candidates_.size()); 1007 if (bundle) {
973 for (size_t i = 0; i < observer_.mline_0_candidates_.size(); ++i) { 1008 EXPECT_EQ(0, observer_.mline_1_candidates_.size());
974 cricket::Candidate c0 = observer_.mline_0_candidates_[i]; 1009 } else {
975 cricket::Candidate c1 = observer_.mline_1_candidates_[i]; 1010 EXPECT_EQ(expected_candidate_num, observer_.mline_1_candidates_.size());
976 if (bundle) {
977 EXPECT_TRUE(c0.IsEquivalent(c1));
978 } else {
979 EXPECT_FALSE(c0.IsEquivalent(c1));
980 }
981 } 1011 }
982 } 1012 }
983 // Tests that we can only send DTMF when the dtmf codec is supported. 1013 // Tests that we can only send DTMF when the dtmf codec is supported.
984 void TestCanInsertDtmf(bool can) { 1014 void TestCanInsertDtmf(bool can) {
985 if (can) { 1015 if (can) {
986 InitWithDtmfCodec(); 1016 InitWithDtmfCodec();
987 } else { 1017 } else {
988 Init(); 1018 Init();
989 } 1019 }
990 mediastream_signaling_.SendAudioVideoStream1(); 1020 mediastream_signaling_.SendAudioVideoStream1();
991 CreateAndSetRemoteOfferAndLocalAnswer(); 1021 CreateAndSetRemoteOfferAndLocalAnswer();
992 EXPECT_FALSE(session_->CanInsertDtmf("")); 1022 EXPECT_FALSE(session_->CanInsertDtmf(""));
993 EXPECT_EQ(can, session_->CanInsertDtmf(kAudioTrack1)); 1023 EXPECT_EQ(can, session_->CanInsertDtmf(kAudioTrack1));
994 } 1024 }
995 1025
996 // Helper class to configure loopback network and verify Best 1026 // Helper class to configure loopback network and verify Best
997 // Connection using right IP protocol for TestLoopbackCall 1027 // Connection using right IP protocol for TestLoopbackCall
998 // method. LoopbackNetworkManager applies firewall rules to block 1028 // method. LoopbackNetworkManager applies firewall rules to block
999 // all ping traffic once ICE completed, and remove them to observe 1029 // all ping traffic once ICE completed, and remove them to observe
1000 // ICE reconnected again. This LoopbackNetworkConfiguration struct 1030 // ICE reconnected again. This LoopbackNetworkConfiguration struct
1001 // verifies the best connection is using the right IP protocol after 1031 // verifies the best connection is using the right IP protocol after
1002 // initial ICE convergences. 1032 // initial ICE convergences.
1003 1033
1004 class LoopbackNetworkConfiguration { 1034 class LoopbackNetworkConfiguration {
1005 public: 1035 public:
1006 LoopbackNetworkConfiguration() 1036 LoopbackNetworkConfiguration()
1007 : test_ipv6_network_(false), 1037 : test_ipv6_network_(false),
1008 test_extra_ipv4_network_(false), 1038 test_extra_ipv4_network_(false),
1009 best_connection_after_initial_ice_converged_(1, 0) {} 1039 best_connection_after_initial_ice_converged_(1, 0) {}
1010 1040
1011 // Used to track the expected best connection count in each IP protocol. 1041 // Used to track the expected best connection count in each IP protocol.
1012 struct ExpectedBestConnection { 1042 struct ExpectedBestConnection {
1013 ExpectedBestConnection(int ipv4_count, int ipv6_count) 1043 ExpectedBestConnection(int ipv4_count, int ipv6_count)
1014 : ipv4_count_(ipv4_count), 1044 : ipv4_count_(ipv4_count),
1015 ipv6_count_(ipv6_count) {} 1045 ipv6_count_(ipv6_count) {}
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 1174
1145 LOG(LS_INFO) << "Firewall Rules applied"; 1175 LOG(LS_INFO) << "Firewall Rules applied";
1146 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionDisconnected, 1176 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionDisconnected,
1147 observer_.ice_connection_state_, 1177 observer_.ice_connection_state_,
1148 kIceCandidatesTimeout); 1178 kIceCandidatesTimeout);
1149 1179
1150 metrics_observer_->Reset(); 1180 metrics_observer_->Reset();
1151 1181
1152 // Clearing the rules, session should move back to completed state. 1182 // Clearing the rules, session should move back to completed state.
1153 loopback_network_manager.ClearRules(fss_.get()); 1183 loopback_network_manager.ClearRules(fss_.get());
1154 // Session is automatically calling OnSignalingReady after creation of
1155 // new portallocator session which will allocate new set of candidates.
1156 1184
1157 LOG(LS_INFO) << "Firewall Rules cleared"; 1185 LOG(LS_INFO) << "Firewall Rules cleared";
1158
1159 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, 1186 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted,
1160 observer_.ice_connection_state_, 1187 observer_.ice_connection_state_,
1161 kIceCandidatesTimeout); 1188 kIceCandidatesTimeout);
1162 1189
1163 // Now we block ping requests and wait until the ICE connection transitions 1190 // Now we block ping requests and wait until the ICE connection transitions
1164 // to the Failed state. This will take at least 30 seconds because it must 1191 // to the Failed state. This will take at least 30 seconds because it must
1165 // wait for the Port to timeout. 1192 // wait for the Port to timeout.
1166 int port_timeout = 30000; 1193 int port_timeout = 30000;
1167 1194
1168 loopback_network_manager.ApplyFirewallRules(fss_.get()); 1195 loopback_network_manager.ApplyFirewallRules(fss_.get());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 VerifyMultipleAsyncCreateDescriptionAfterInit(true, type); 1245 VerifyMultipleAsyncCreateDescriptionAfterInit(true, type);
1219 } 1246 }
1220 1247
1221 void VerifyMultipleAsyncCreateDescriptionIdentityGenFailure( 1248 void VerifyMultipleAsyncCreateDescriptionIdentityGenFailure(
1222 CreateSessionDescriptionRequest::Type type) { 1249 CreateSessionDescriptionRequest::Type type) {
1223 InitWithDtlsIdentityGenFail(); 1250 InitWithDtlsIdentityGenFail();
1224 VerifyMultipleAsyncCreateDescriptionAfterInit(false, type); 1251 VerifyMultipleAsyncCreateDescriptionAfterInit(false, type);
1225 } 1252 }
1226 1253
1227 void VerifyMultipleAsyncCreateDescriptionAfterInit( 1254 void VerifyMultipleAsyncCreateDescriptionAfterInit(
1228 bool success, CreateSessionDescriptionRequest::Type type) { 1255 bool success,
1256 CreateSessionDescriptionRequest::Type type) {
1229 CHECK(session_); 1257 CHECK(session_);
1230 SetFactoryDtlsSrtp(); 1258 SetFactoryDtlsSrtp();
1231 if (type == CreateSessionDescriptionRequest::kAnswer) { 1259 if (type == CreateSessionDescriptionRequest::kAnswer) {
1232 cricket::MediaSessionOptions options; 1260 cricket::MediaSessionOptions options;
1233 scoped_ptr<JsepSessionDescription> offer( 1261 scoped_ptr<JsepSessionDescription> offer(
1234 CreateRemoteOffer(options, cricket::SEC_DISABLED)); 1262 CreateRemoteOffer(options, cricket::SEC_DISABLED));
1235 ASSERT_TRUE(offer.get() != NULL); 1263 ASSERT_TRUE(offer.get() != NULL);
1236 SetRemoteDescriptionWithoutError(offer.release()); 1264 SetRemoteDescriptionWithoutError(offer.release());
1237 } 1265 }
1238 1266
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
1701 // the offer and answer. 1729 // the offer and answer.
1702 SetRemoteDescriptionWithoutError(offer); 1730 SetRemoteDescriptionWithoutError(offer);
1703 SetLocalDescriptionAnswerExpectError( 1731 SetLocalDescriptionAnswerExpectError(
1704 kSdpWithoutDtlsFingerprint, answer); 1732 kSdpWithoutDtlsFingerprint, answer);
1705 } 1733 }
1706 1734
1707 // Test that we return a failure when applying a remote answer that doesn't have 1735 // Test that we return a failure when applying a remote answer that doesn't have
1708 // a DTLS fingerprint when DTLS is required. 1736 // a DTLS fingerprint when DTLS is required.
1709 TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { 1737 TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) {
1710 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1738 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1711 // Enable both SDES and DTLS, so that offer won't be outright rejected as a
1712 // result of using the "UDP/TLS/RTP/SAVPF" profile.
1713 InitWithDtls(GetParam()); 1739 InitWithDtls(GetParam());
1714 session_->SetSdesPolicy(cricket::SEC_ENABLED);
1715 SessionDescriptionInterface* offer = CreateOffer(); 1740 SessionDescriptionInterface* offer = CreateOffer();
1716 cricket::MediaSessionOptions options; 1741 cricket::MediaSessionOptions options;
1717 options.recv_video = true; 1742 options.recv_video = true;
1743 rtc::scoped_ptr<SessionDescriptionInterface> temp_offer(
1744 CreateRemoteOffer(options, cricket::SEC_ENABLED));
1718 JsepSessionDescription* answer = 1745 JsepSessionDescription* answer =
1719 CreateRemoteAnswer(offer, options, cricket::SEC_ENABLED); 1746 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED);
1720 1747
1721 // SetRemoteDescription and SetLocalDescription will take the ownership of 1748 // SetRemoteDescription and SetLocalDescription will take the ownership of
1722 // the offer and answer. 1749 // the offer and answer.
1723 SetLocalDescriptionWithoutError(offer); 1750 SetLocalDescriptionWithoutError(offer);
1724 SetRemoteDescriptionAnswerExpectError( 1751 SetRemoteDescriptionAnswerExpectError(
1725 kSdpWithoutDtlsFingerprint, answer); 1752 kSdpWithoutDtlsFingerprint, answer);
1726 } 1753 }
1727 1754
1728 // Test that we create a local offer without SDES or DTLS and accept a remote 1755 // Test that we create a local offer without SDES or DTLS and accept a remote
1729 // answer without SDES or DTLS when encryption is disabled. 1756 // answer without SDES or DTLS when encryption is disabled.
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
2011 EXPECT_EQ(0u, candidates->count()); 2038 EXPECT_EQ(0u, candidates->count());
2012 2039
2013 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); 2040 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout);
2014 2041
2015 local_desc = session_->local_description(); 2042 local_desc = session_->local_description();
2016 candidates = local_desc->candidates(kMediaContentIndex0); 2043 candidates = local_desc->candidates(kMediaContentIndex0);
2017 ASSERT_TRUE(candidates != NULL); 2044 ASSERT_TRUE(candidates != NULL);
2018 EXPECT_LT(0u, candidates->count()); 2045 EXPECT_LT(0u, candidates->count());
2019 candidates = local_desc->candidates(1); 2046 candidates = local_desc->candidates(1);
2020 ASSERT_TRUE(candidates != NULL); 2047 ASSERT_TRUE(candidates != NULL);
2021 EXPECT_LT(0u, candidates->count()); 2048 EXPECT_EQ(0u, candidates->count());
2022 2049
2023 // Update the session descriptions. 2050 // Update the session descriptions.
2024 mediastream_signaling_.SendAudioVideoStream1(); 2051 mediastream_signaling_.SendAudioVideoStream1();
2025 CreateAndSetRemoteOfferAndLocalAnswer(); 2052 CreateAndSetRemoteOfferAndLocalAnswer();
2026 2053
2027 local_desc = session_->local_description(); 2054 local_desc = session_->local_description();
2028 candidates = local_desc->candidates(kMediaContentIndex0); 2055 candidates = local_desc->candidates(kMediaContentIndex0);
2029 ASSERT_TRUE(candidates != NULL); 2056 ASSERT_TRUE(candidates != NULL);
2030 EXPECT_LT(0u, candidates->count()); 2057 EXPECT_LT(0u, candidates->count());
2031 candidates = local_desc->candidates(1); 2058 candidates = local_desc->candidates(1);
2032 ASSERT_TRUE(candidates != NULL); 2059 ASSERT_TRUE(candidates != NULL);
2033 EXPECT_LT(0u, candidates->count()); 2060 EXPECT_EQ(0u, candidates->count());
2034 } 2061 }
2035 2062
2036 // Test that we can set a remote session description with remote candidates. 2063 // Test that we can set a remote session description with remote candidates.
2037 TEST_F(WebRtcSessionTest, TestSetRemoteSessionDescriptionWithCandidates) { 2064 TEST_F(WebRtcSessionTest, TestSetRemoteSessionDescriptionWithCandidates) {
2038 Init(); 2065 Init();
2039 2066
2040 cricket::Candidate candidate1; 2067 cricket::Candidate candidate1;
2041 candidate1.set_component(1); 2068 candidate1.set_component(1);
2042 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0, 2069 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0,
2043 candidate1); 2070 candidate1);
(...skipping 23 matching lines...) Expand all
2067 Init(); 2094 Init();
2068 mediastream_signaling_.SendAudioVideoStream1(); 2095 mediastream_signaling_.SendAudioVideoStream1();
2069 // Ice is started but candidates are not provided until SetLocalDescription 2096 // Ice is started but candidates are not provided until SetLocalDescription
2070 // is called. 2097 // is called.
2071 EXPECT_EQ(0u, observer_.mline_0_candidates_.size()); 2098 EXPECT_EQ(0u, observer_.mline_0_candidates_.size());
2072 EXPECT_EQ(0u, observer_.mline_1_candidates_.size()); 2099 EXPECT_EQ(0u, observer_.mline_1_candidates_.size());
2073 CreateAndSetRemoteOfferAndLocalAnswer(); 2100 CreateAndSetRemoteOfferAndLocalAnswer();
2074 // Wait until at least one local candidate has been collected. 2101 // Wait until at least one local candidate has been collected.
2075 EXPECT_TRUE_WAIT(0u < observer_.mline_0_candidates_.size(), 2102 EXPECT_TRUE_WAIT(0u < observer_.mline_0_candidates_.size(),
2076 kIceCandidatesTimeout); 2103 kIceCandidatesTimeout);
2077 EXPECT_TRUE_WAIT(0u < observer_.mline_1_candidates_.size(),
2078 kIceCandidatesTimeout);
2079 2104
2080 rtc::scoped_ptr<SessionDescriptionInterface> local_offer(CreateOffer()); 2105 rtc::scoped_ptr<SessionDescriptionInterface> local_offer(CreateOffer());
2081 2106
2082 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex0) != NULL); 2107 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex0) != NULL);
2083 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex0)->count()); 2108 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex0)->count());
2084 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex1) != NULL);
2085 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex1)->count());
2086 2109
2087 SessionDescriptionInterface* remote_offer(CreateRemoteOffer()); 2110 SessionDescriptionInterface* remote_offer(CreateRemoteOffer());
2088 SetRemoteDescriptionWithoutError(remote_offer); 2111 SetRemoteDescriptionWithoutError(remote_offer);
2089 SessionDescriptionInterface* answer = CreateAnswer(NULL); 2112 SessionDescriptionInterface* answer = CreateAnswer(NULL);
2090 ASSERT_TRUE(answer->candidates(kMediaContentIndex0) != NULL); 2113 ASSERT_TRUE(answer->candidates(kMediaContentIndex0) != NULL);
2091 EXPECT_LT(0u, answer->candidates(kMediaContentIndex0)->count()); 2114 EXPECT_LT(0u, answer->candidates(kMediaContentIndex0)->count());
2092 ASSERT_TRUE(answer->candidates(kMediaContentIndex1) != NULL);
2093 EXPECT_LT(0u, answer->candidates(kMediaContentIndex1)->count());
2094 SetLocalDescriptionWithoutError(answer); 2115 SetLocalDescriptionWithoutError(answer);
2095 } 2116 }
2096 2117
2097 // Verifies TransportProxy and media channels are created with content names 2118 // Verifies TransportProxy and media channels are created with content names
2098 // present in the SessionDescription. 2119 // present in the SessionDescription.
2099 TEST_F(WebRtcSessionTest, TestChannelCreationsWithContentNames) { 2120 TEST_F(WebRtcSessionTest, TestChannelCreationsWithContentNames) {
2100 Init(); 2121 Init();
2101 mediastream_signaling_.SendAudioVideoStream1(); 2122 mediastream_signaling_.SendAudioVideoStream1();
2102 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2123 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
2103 2124
(...skipping 21 matching lines...) Expand all
2125 2146
2126 SessionDescriptionInterface* modified_offer = 2147 SessionDescriptionInterface* modified_offer =
2127 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL); 2148 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL);
2128 2149
2129 SetRemoteDescriptionWithoutError(modified_offer); 2150 SetRemoteDescriptionWithoutError(modified_offer);
2130 2151
2131 SessionDescriptionInterface* answer = 2152 SessionDescriptionInterface* answer =
2132 CreateAnswer(NULL); 2153 CreateAnswer(NULL);
2133 SetLocalDescriptionWithoutError(answer); 2154 SetLocalDescriptionWithoutError(answer);
2134 2155
2135 EXPECT_TRUE(session_->GetTransportProxy("audio_content_name") != NULL); 2156 cricket::TransportChannel* voice_transport_channel =
2136 EXPECT_TRUE(session_->GetTransportProxy("video_content_name") != NULL); 2157 session_->voice_rtp_transport_channel();
2158 EXPECT_TRUE(voice_transport_channel != NULL);
2159 EXPECT_EQ(voice_transport_channel->transport_name(), "audio_content_name");
2160 cricket::TransportChannel* video_transport_channel =
2161 session_->video_rtp_transport_channel();
2162 EXPECT_TRUE(video_transport_channel != NULL);
2163 EXPECT_EQ(video_transport_channel->transport_name(), "video_content_name");
2137 EXPECT_TRUE((video_channel_ = media_engine_->GetVideoChannel(0)) != NULL); 2164 EXPECT_TRUE((video_channel_ = media_engine_->GetVideoChannel(0)) != NULL);
2138 EXPECT_TRUE((voice_channel_ = media_engine_->GetVoiceChannel(0)) != NULL); 2165 EXPECT_TRUE((voice_channel_ = media_engine_->GetVoiceChannel(0)) != NULL);
2139 } 2166 }
2140 2167
2141 // Test that an offer contains the correct media content descriptions based on 2168 // Test that an offer contains the correct media content descriptions based on
2142 // the send streams when no constraints have been set. 2169 // the send streams when no constraints have been set.
2143 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraintsOrStreams) { 2170 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraintsOrStreams) {
2144 Init(); 2171 Init();
2145 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2172 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
2146 2173
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
2686 2713
2687 PeerConnectionInterface::RTCOfferAnswerOptions options; 2714 PeerConnectionInterface::RTCOfferAnswerOptions options;
2688 options.use_rtp_mux = true; 2715 options.use_rtp_mux = true;
2689 2716
2690 SessionDescriptionInterface* offer = CreateRemoteOffer(); 2717 SessionDescriptionInterface* offer = CreateRemoteOffer();
2691 SetRemoteDescriptionWithoutError(offer); 2718 SetRemoteDescriptionWithoutError(offer);
2692 2719
2693 SessionDescriptionInterface* answer = CreateAnswer(NULL); 2720 SessionDescriptionInterface* answer = CreateAnswer(NULL);
2694 SetLocalDescriptionWithoutError(answer); 2721 SetLocalDescriptionWithoutError(answer);
2695 2722
2696 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2723 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2697 session_->GetTransportProxy("video")->impl()); 2724 session_->video_rtp_transport_channel());
2698 2725
2699 cricket::Transport* t = session_->GetTransport("audio"); 2726 cricket::BaseChannel* voice_channel = session_->voice_channel();
2727 ASSERT(voice_channel != NULL);
2700 2728
2701 // Checks if one of the transport channels contains a connection using a given 2729 // Checks if one of the transport channels contains a connection using a given
2702 // port. 2730 // port.
2703 auto connection_with_remote_port = [t](int port) { 2731 auto connection_with_remote_port = [this, voice_channel](int port) {
2704 cricket::TransportStats stats; 2732 cricket::SessionStats stats;
2705 t->GetStats(&stats); 2733 session_->GetChannelTransportStats(voice_channel, &stats);
2706 for (auto& chan_stat : stats.channel_stats) { 2734 for (auto& kv : stats.transport_stats) {
2707 for (auto& conn_info : chan_stat.connection_infos) { 2735 for (auto& chan_stat : kv.second.channel_stats) {
2708 if (conn_info.remote_candidate.address().port() == port) { 2736 for (auto& conn_info : chan_stat.connection_infos) {
2709 return true; 2737 if (conn_info.remote_candidate.address().port() == port) {
2738 return true;
2739 }
2710 } 2740 }
2711 } 2741 }
2712 } 2742 }
2713 return false; 2743 return false;
2714 }; 2744 };
2715 2745
2716 EXPECT_FALSE(connection_with_remote_port(5000)); 2746 EXPECT_FALSE(connection_with_remote_port(5000));
2717 EXPECT_FALSE(connection_with_remote_port(5001)); 2747 EXPECT_FALSE(connection_with_remote_port(5001));
2718 EXPECT_FALSE(connection_with_remote_port(6000)); 2748 EXPECT_FALSE(connection_with_remote_port(6000));
2719 2749
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2752 2782
2753 EXPECT_TRUE_WAIT(connection_with_remote_port(5000), 1000); 2783 EXPECT_TRUE_WAIT(connection_with_remote_port(5000), 1000);
2754 EXPECT_TRUE_WAIT(connection_with_remote_port(5001), 1000); 2784 EXPECT_TRUE_WAIT(connection_with_remote_port(5001), 1000);
2755 2785
2756 // No need here for a _WAIT check since we are checking that state hasn't 2786 // No need here for a _WAIT check since we are checking that state hasn't
2757 // changed: if this is false we would be doing waits for nothing and if this 2787 // changed: if this is false we would be doing waits for nothing and if this
2758 // is true then there will be no messages processed anyways. 2788 // is true then there will be no messages processed anyways.
2759 EXPECT_FALSE(connection_with_remote_port(6000)); 2789 EXPECT_FALSE(connection_with_remote_port(6000));
2760 } 2790 }
2761 2791
2762 // kBundlePolicyBalanced bundle policy and answer contains BUNDLE. 2792 // kBundlePolicyBalanced BUNDLE policy and answer contains BUNDLE.
2763 TEST_F(WebRtcSessionTest, TestBalancedBundleInAnswer) { 2793 TEST_F(WebRtcSessionTest, TestBalancedBundleInAnswer) {
2764 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced); 2794 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced);
2765 mediastream_signaling_.SendAudioVideoStream1(); 2795 mediastream_signaling_.SendAudioVideoStream1();
2766 2796
2767 PeerConnectionInterface::RTCOfferAnswerOptions options; 2797 PeerConnectionInterface::RTCOfferAnswerOptions options;
2768 options.use_rtp_mux = true; 2798 options.use_rtp_mux = true;
2769 2799
2770 SessionDescriptionInterface* offer = CreateOffer(options); 2800 SessionDescriptionInterface* offer = CreateOffer(options);
2771 SetLocalDescriptionWithoutError(offer); 2801 SetLocalDescriptionWithoutError(offer);
2772 2802
2773 EXPECT_NE(session_->GetTransportProxy("audio")->impl(), 2803 EXPECT_NE(session_->voice_rtp_transport_channel(),
2774 session_->GetTransportProxy("video")->impl()); 2804 session_->video_rtp_transport_channel());
2775 2805
2776 mediastream_signaling_.SendAudioVideoStream2(); 2806 mediastream_signaling_.SendAudioVideoStream2();
2777 SessionDescriptionInterface* answer = 2807 SessionDescriptionInterface* answer =
2778 CreateRemoteAnswer(session_->local_description()); 2808 CreateRemoteAnswer(session_->local_description());
2779 SetRemoteDescriptionWithoutError(answer); 2809 SetRemoteDescriptionWithoutError(answer);
2780 2810
2781 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2811 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2782 session_->GetTransportProxy("video")->impl()); 2812 session_->video_rtp_transport_channel());
2783 } 2813 }
2784 2814
2785 // kBundlePolicyBalanced bundle policy but no BUNDLE in the answer. 2815 // kBundlePolicyBalanced BUNDLE policy but no BUNDLE in the answer.
2786 TEST_F(WebRtcSessionTest, TestBalancedNoBundleInAnswer) { 2816 TEST_F(WebRtcSessionTest, TestBalancedNoBundleInAnswer) {
2787 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced); 2817 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced);
2788 mediastream_signaling_.SendAudioVideoStream1(); 2818 mediastream_signaling_.SendAudioVideoStream1();
2789 2819
2790 PeerConnectionInterface::RTCOfferAnswerOptions options; 2820 PeerConnectionInterface::RTCOfferAnswerOptions options;
2791 options.use_rtp_mux = true; 2821 options.use_rtp_mux = true;
2792 2822
2793 SessionDescriptionInterface* offer = CreateOffer(options); 2823 SessionDescriptionInterface* offer = CreateOffer(options);
2794 SetLocalDescriptionWithoutError(offer); 2824 SetLocalDescriptionWithoutError(offer);
2795 2825
2796 EXPECT_NE(session_->GetTransportProxy("audio")->impl(), 2826 EXPECT_NE(session_->voice_rtp_transport_channel(),
2797 session_->GetTransportProxy("video")->impl()); 2827 session_->video_rtp_transport_channel());
2798 2828
2799 mediastream_signaling_.SendAudioVideoStream2(); 2829 mediastream_signaling_.SendAudioVideoStream2();
2800 2830
2801 // Remove BUNDLE from the answer. 2831 // Remove BUNDLE from the answer.
2802 rtc::scoped_ptr<SessionDescriptionInterface> answer( 2832 rtc::scoped_ptr<SessionDescriptionInterface> answer(
2803 CreateRemoteAnswer(session_->local_description())); 2833 CreateRemoteAnswer(session_->local_description()));
2804 cricket::SessionDescription* answer_copy = answer->description()->Copy(); 2834 cricket::SessionDescription* answer_copy = answer->description()->Copy();
2805 answer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE); 2835 answer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE);
2806 JsepSessionDescription* modified_answer = 2836 JsepSessionDescription* modified_answer =
2807 new JsepSessionDescription(JsepSessionDescription::kAnswer); 2837 new JsepSessionDescription(JsepSessionDescription::kAnswer);
2808 modified_answer->Initialize(answer_copy, "1", "1"); 2838 modified_answer->Initialize(answer_copy, "1", "1");
2809 SetRemoteDescriptionWithoutError(modified_answer); // 2839 SetRemoteDescriptionWithoutError(modified_answer); //
2810 2840
2811 EXPECT_NE(session_->GetTransportProxy("audio")->impl(), 2841 EXPECT_NE(session_->voice_rtp_transport_channel(),
2812 session_->GetTransportProxy("video")->impl()); 2842 session_->video_rtp_transport_channel());
2813 } 2843 }
2814 2844
2815 // kBundlePolicyMaxBundle policy with BUNDLE in the answer. 2845 // kBundlePolicyMaxBundle policy with BUNDLE in the answer.
2816 TEST_F(WebRtcSessionTest, TestMaxBundleBundleInAnswer) { 2846 TEST_F(WebRtcSessionTest, TestMaxBundleBundleInAnswer) {
2817 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle); 2847 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle);
2818 mediastream_signaling_.SendAudioVideoStream1(); 2848 mediastream_signaling_.SendAudioVideoStream1();
2819 2849
2820 PeerConnectionInterface::RTCOfferAnswerOptions options; 2850 PeerConnectionInterface::RTCOfferAnswerOptions options;
2821 options.use_rtp_mux = true; 2851 options.use_rtp_mux = true;
2822 2852
2823 SessionDescriptionInterface* offer = CreateOffer(options); 2853 SessionDescriptionInterface* offer = CreateOffer(options);
2824 SetLocalDescriptionWithoutError(offer); 2854 SetLocalDescriptionWithoutError(offer);
2825 2855
2826 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2856 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2827 session_->GetTransportProxy("video")->impl()); 2857 session_->video_rtp_transport_channel());
2828 2858
2829 mediastream_signaling_.SendAudioVideoStream2(); 2859 mediastream_signaling_.SendAudioVideoStream2();
2830 SessionDescriptionInterface* answer = 2860 SessionDescriptionInterface* answer =
2831 CreateRemoteAnswer(session_->local_description()); 2861 CreateRemoteAnswer(session_->local_description());
2832 SetRemoteDescriptionWithoutError(answer); 2862 SetRemoteDescriptionWithoutError(answer);
2833 2863
2834 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2864 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2835 session_->GetTransportProxy("video")->impl()); 2865 session_->video_rtp_transport_channel());
2866 }
2867
2868 // kBundlePolicyMaxBundle policy with BUNDLE in the answer, but no
2869 // audio content in the answer.
2870 TEST_F(WebRtcSessionTest, TestMaxBundleRejectAudio) {
2871 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle);
2872 mediastream_signaling_.SendAudioVideoStream1();
2873
2874 PeerConnectionInterface::RTCOfferAnswerOptions options;
2875 options.use_rtp_mux = true;
2876
2877 SessionDescriptionInterface* offer = CreateOffer(options);
2878 SetLocalDescriptionWithoutError(offer);
2879
2880 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2881 session_->video_rtp_transport_channel());
2882
2883 mediastream_signaling_.SendAudioVideoStream2();
2884 cricket::MediaSessionOptions recv_options;
2885 recv_options.recv_audio = false;
2886 recv_options.recv_video = true;
2887 SessionDescriptionInterface* answer =
2888 CreateRemoteAnswer(session_->local_description(), recv_options);
2889 SetRemoteDescriptionWithoutError(answer);
2890
2891 EXPECT_TRUE(NULL == session_->voice_channel());
2892 EXPECT_TRUE(NULL != session_->video_rtp_transport_channel());
2893
2894 session_->Terminate();
2895 EXPECT_TRUE(NULL == session_->voice_rtp_transport_channel());
2896 EXPECT_TRUE(NULL == session_->voice_rtcp_transport_channel());
2897 EXPECT_TRUE(NULL == session_->video_rtp_transport_channel());
2898 EXPECT_TRUE(NULL == session_->video_rtcp_transport_channel());
2836 } 2899 }
2837 2900
2838 // kBundlePolicyMaxBundle policy but no BUNDLE in the answer. 2901 // kBundlePolicyMaxBundle policy but no BUNDLE in the answer.
2839 TEST_F(WebRtcSessionTest, TestMaxBundleNoBundleInAnswer) { 2902 TEST_F(WebRtcSessionTest, TestMaxBundleNoBundleInAnswer) {
2840 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle); 2903 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle);
2841 mediastream_signaling_.SendAudioVideoStream1(); 2904 mediastream_signaling_.SendAudioVideoStream1();
2842 2905
2843 PeerConnectionInterface::RTCOfferAnswerOptions options; 2906 PeerConnectionInterface::RTCOfferAnswerOptions options;
2844 options.use_rtp_mux = true; 2907 options.use_rtp_mux = true;
2845 2908
2846 SessionDescriptionInterface* offer = CreateOffer(options); 2909 SessionDescriptionInterface* offer = CreateOffer(options);
2847 SetLocalDescriptionWithoutError(offer); 2910 SetLocalDescriptionWithoutError(offer);
2848 2911
2849 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2912 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2850 session_->GetTransportProxy("video")->impl()); 2913 session_->video_rtp_transport_channel());
2851 2914
2852 mediastream_signaling_.SendAudioVideoStream2(); 2915 mediastream_signaling_.SendAudioVideoStream2();
2853 2916
2854 // Remove BUNDLE from the answer. 2917 // Remove BUNDLE from the answer.
2855 rtc::scoped_ptr<SessionDescriptionInterface> answer( 2918 rtc::scoped_ptr<SessionDescriptionInterface> answer(
2856 CreateRemoteAnswer(session_->local_description())); 2919 CreateRemoteAnswer(session_->local_description()));
2857 cricket::SessionDescription* answer_copy = answer->description()->Copy(); 2920 cricket::SessionDescription* answer_copy = answer->description()->Copy();
2858 answer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE); 2921 answer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE);
2859 JsepSessionDescription* modified_answer = 2922 JsepSessionDescription* modified_answer =
2860 new JsepSessionDescription(JsepSessionDescription::kAnswer); 2923 new JsepSessionDescription(JsepSessionDescription::kAnswer);
2861 modified_answer->Initialize(answer_copy, "1", "1"); 2924 modified_answer->Initialize(answer_copy, "1", "1");
2862 SetRemoteDescriptionWithoutError(modified_answer); 2925 SetRemoteDescriptionWithoutError(modified_answer);
2863 2926
2864 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2927 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2865 session_->GetTransportProxy("video")->impl()); 2928 session_->video_rtp_transport_channel());
2929 }
2930
2931 // kBundlePolicyMaxBundle policy with BUNDLE in the remote offer.
2932 TEST_F(WebRtcSessionTest, TestMaxBundleBundleInRemoteOffer) {
2933 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle);
2934 mediastream_signaling_.SendAudioVideoStream1();
2935
2936 SessionDescriptionInterface* offer = CreateRemoteOffer();
2937 SetRemoteDescriptionWithoutError(offer);
2938
2939 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2940 session_->video_rtp_transport_channel());
2941
2942 mediastream_signaling_.SendAudioVideoStream2();
2943 SessionDescriptionInterface* answer = CreateAnswer(nullptr);
2944 SetLocalDescriptionWithoutError(answer);
2945
2946 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2947 session_->video_rtp_transport_channel());
2948 }
2949
2950 // kBundlePolicyMaxBundle policy but no BUNDLE in the remote offer.
2951 TEST_F(WebRtcSessionTest, TestMaxBundleNoBundleInRemoteOffer) {
2952 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle);
2953 mediastream_signaling_.SendAudioVideoStream1();
2954
2955 // Remove BUNDLE from the offer.
2956 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateRemoteOffer());
2957 cricket::SessionDescription* offer_copy = offer->description()->Copy();
2958 offer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE);
2959 JsepSessionDescription* modified_offer =
2960 new JsepSessionDescription(JsepSessionDescription::kOffer);
2961 modified_offer->Initialize(offer_copy, "1", "1");
2962
2963 // Expect an error when applying the remote description
2964 SetRemoteDescriptionExpectError(JsepSessionDescription::kOffer,
2965 kCreateChannelFailed, modified_offer);
2866 } 2966 }
2867 2967
2868 // kBundlePolicyMaxCompat bundle policy and answer contains BUNDLE. 2968 // kBundlePolicyMaxCompat bundle policy and answer contains BUNDLE.
2869 TEST_F(WebRtcSessionTest, TestMaxCompatBundleInAnswer) { 2969 TEST_F(WebRtcSessionTest, TestMaxCompatBundleInAnswer) {
2870 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxCompat); 2970 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxCompat);
2871 mediastream_signaling_.SendAudioVideoStream1(); 2971 mediastream_signaling_.SendAudioVideoStream1();
2872 2972
2873 PeerConnectionInterface::RTCOfferAnswerOptions options; 2973 PeerConnectionInterface::RTCOfferAnswerOptions options;
2874 options.use_rtp_mux = true; 2974 options.use_rtp_mux = true;
2875 2975
2876 SessionDescriptionInterface* offer = CreateOffer(options); 2976 SessionDescriptionInterface* offer = CreateOffer(options);
2877 SetLocalDescriptionWithoutError(offer); 2977 SetLocalDescriptionWithoutError(offer);
2878 2978
2879 EXPECT_NE(session_->GetTransportProxy("audio")->impl(), 2979 EXPECT_NE(session_->voice_rtp_transport_channel(),
2880 session_->GetTransportProxy("video")->impl()); 2980 session_->video_rtp_transport_channel());
2881 2981
2882 mediastream_signaling_.SendAudioVideoStream2(); 2982 mediastream_signaling_.SendAudioVideoStream2();
2883 SessionDescriptionInterface* answer = 2983 SessionDescriptionInterface* answer =
2884 CreateRemoteAnswer(session_->local_description()); 2984 CreateRemoteAnswer(session_->local_description());
2885 SetRemoteDescriptionWithoutError(answer); 2985 SetRemoteDescriptionWithoutError(answer);
2886 2986
2887 // This should lead to an audio-only call but isn't implemented 2987 // This should lead to an audio-only call but isn't implemented
2888 // correctly yet. 2988 // correctly yet.
2889 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 2989 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2890 session_->GetTransportProxy("video")->impl()); 2990 session_->video_rtp_transport_channel());
2891 } 2991 }
2892 2992
2893 // kBundlePolicyMaxCompat bundle policy but no BUNDLE in the answer. 2993 // kBundlePolicyMaxCompat BUNDLE policy but no BUNDLE in the answer.
2894 TEST_F(WebRtcSessionTest, TestMaxCompatNoBundleInAnswer) { 2994 TEST_F(WebRtcSessionTest, TestMaxCompatNoBundleInAnswer) {
2895 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxCompat); 2995 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxCompat);
2896 mediastream_signaling_.SendAudioVideoStream1(); 2996 mediastream_signaling_.SendAudioVideoStream1();
2897 PeerConnectionInterface::RTCOfferAnswerOptions options; 2997 PeerConnectionInterface::RTCOfferAnswerOptions options;
2898 options.use_rtp_mux = true; 2998 options.use_rtp_mux = true;
2899 2999
2900 SessionDescriptionInterface* offer = CreateOffer(options); 3000 SessionDescriptionInterface* offer = CreateOffer(options);
2901 SetLocalDescriptionWithoutError(offer); 3001 SetLocalDescriptionWithoutError(offer);
2902 3002
2903 EXPECT_NE(session_->GetTransportProxy("audio")->impl(), 3003 EXPECT_NE(session_->voice_rtp_transport_channel(),
2904 session_->GetTransportProxy("video")->impl()); 3004 session_->video_rtp_transport_channel());
2905 3005
2906 mediastream_signaling_.SendAudioVideoStream2(); 3006 mediastream_signaling_.SendAudioVideoStream2();
2907 3007
2908 // Remove BUNDLE from the answer. 3008 // Remove BUNDLE from the answer.
2909 rtc::scoped_ptr<SessionDescriptionInterface> answer( 3009 rtc::scoped_ptr<SessionDescriptionInterface> answer(
2910 CreateRemoteAnswer(session_->local_description())); 3010 CreateRemoteAnswer(session_->local_description()));
2911 cricket::SessionDescription* answer_copy = answer->description()->Copy(); 3011 cricket::SessionDescription* answer_copy = answer->description()->Copy();
2912 answer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE); 3012 answer_copy->RemoveGroupByName(cricket::GROUP_TYPE_BUNDLE);
2913 JsepSessionDescription* modified_answer = 3013 JsepSessionDescription* modified_answer =
2914 new JsepSessionDescription(JsepSessionDescription::kAnswer); 3014 new JsepSessionDescription(JsepSessionDescription::kAnswer);
2915 modified_answer->Initialize(answer_copy, "1", "1"); 3015 modified_answer->Initialize(answer_copy, "1", "1");
2916 SetRemoteDescriptionWithoutError(modified_answer); // 3016 SetRemoteDescriptionWithoutError(modified_answer); //
2917 3017
2918 EXPECT_NE(session_->GetTransportProxy("audio")->impl(), 3018 EXPECT_NE(session_->voice_rtp_transport_channel(),
2919 session_->GetTransportProxy("video")->impl()); 3019 session_->video_rtp_transport_channel());
2920 } 3020 }
2921 3021
2922 // kBundlePolicyMaxbundle and then we call SetRemoteDescription first. 3022 // kBundlePolicyMaxbundle and then we call SetRemoteDescription first.
2923 TEST_F(WebRtcSessionTest, TestMaxBundleWithSetRemoteDescriptionFirst) { 3023 TEST_F(WebRtcSessionTest, TestMaxBundleWithSetRemoteDescriptionFirst) {
2924 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle); 3024 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxBundle);
2925 mediastream_signaling_.SendAudioVideoStream1(); 3025 mediastream_signaling_.SendAudioVideoStream1();
2926 3026
2927 PeerConnectionInterface::RTCOfferAnswerOptions options; 3027 PeerConnectionInterface::RTCOfferAnswerOptions options;
2928 options.use_rtp_mux = true; 3028 options.use_rtp_mux = true;
2929 3029
2930 SessionDescriptionInterface* offer = CreateOffer(options); 3030 SessionDescriptionInterface* offer = CreateOffer(options);
2931 SetRemoteDescriptionWithoutError(offer); 3031 SetRemoteDescriptionWithoutError(offer);
2932 3032
2933 EXPECT_EQ(session_->GetTransportProxy("audio")->impl(), 3033 EXPECT_EQ(session_->voice_rtp_transport_channel(),
2934 session_->GetTransportProxy("video")->impl()); 3034 session_->video_rtp_transport_channel());
2935 } 3035 }
2936 3036
2937 TEST_F(WebRtcSessionTest, TestRequireRtcpMux) { 3037 TEST_F(WebRtcSessionTest, TestRequireRtcpMux) {
2938 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyRequire); 3038 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyRequire);
2939 mediastream_signaling_.SendAudioVideoStream1(); 3039 mediastream_signaling_.SendAudioVideoStream1();
2940 3040
2941 PeerConnectionInterface::RTCOfferAnswerOptions options; 3041 PeerConnectionInterface::RTCOfferAnswerOptions options;
2942 SessionDescriptionInterface* offer = CreateOffer(options); 3042 SessionDescriptionInterface* offer = CreateOffer(options);
2943 SetLocalDescriptionWithoutError(offer); 3043 SetLocalDescriptionWithoutError(offer);
2944 3044
2945 EXPECT_FALSE(session_->GetTransportProxy("audio")->impl()->HasChannel(2)); 3045 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == NULL);
2946 EXPECT_FALSE(session_->GetTransportProxy("video")->impl()->HasChannel(2)); 3046 EXPECT_TRUE(session_->video_rtcp_transport_channel() == NULL);
2947 3047
2948 mediastream_signaling_.SendAudioVideoStream2(); 3048 mediastream_signaling_.SendAudioVideoStream2();
2949 SessionDescriptionInterface* answer = 3049 SessionDescriptionInterface* answer =
2950 CreateRemoteAnswer(session_->local_description()); 3050 CreateRemoteAnswer(session_->local_description());
2951 SetRemoteDescriptionWithoutError(answer); 3051 SetRemoteDescriptionWithoutError(answer);
2952 3052
2953 EXPECT_FALSE(session_->GetTransportProxy("audio")->impl()->HasChannel(2)); 3053 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == NULL);
2954 EXPECT_FALSE(session_->GetTransportProxy("video")->impl()->HasChannel(2)); 3054 EXPECT_TRUE(session_->video_rtcp_transport_channel() == NULL);
2955 } 3055 }
2956 3056
2957 TEST_F(WebRtcSessionTest, TestNegotiateRtcpMux) { 3057 TEST_F(WebRtcSessionTest, TestNegotiateRtcpMux) {
2958 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyNegotiate); 3058 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyNegotiate);
2959 mediastream_signaling_.SendAudioVideoStream1(); 3059 mediastream_signaling_.SendAudioVideoStream1();
2960 3060
2961 PeerConnectionInterface::RTCOfferAnswerOptions options; 3061 PeerConnectionInterface::RTCOfferAnswerOptions options;
2962 SessionDescriptionInterface* offer = CreateOffer(options); 3062 SessionDescriptionInterface* offer = CreateOffer(options);
2963 SetLocalDescriptionWithoutError(offer); 3063 SetLocalDescriptionWithoutError(offer);
2964 3064
2965 EXPECT_TRUE(session_->GetTransportProxy("audio")->impl()->HasChannel(2)); 3065 EXPECT_TRUE(session_->voice_rtcp_transport_channel() != NULL);
2966 EXPECT_TRUE(session_->GetTransportProxy("video")->impl()->HasChannel(2)); 3066 EXPECT_TRUE(session_->video_rtcp_transport_channel() != NULL);
2967 3067
2968 mediastream_signaling_.SendAudioVideoStream2(); 3068 mediastream_signaling_.SendAudioVideoStream2();
2969 SessionDescriptionInterface* answer = 3069 SessionDescriptionInterface* answer =
2970 CreateRemoteAnswer(session_->local_description()); 3070 CreateRemoteAnswer(session_->local_description());
2971 SetRemoteDescriptionWithoutError(answer); 3071 SetRemoteDescriptionWithoutError(answer);
2972 3072
2973 EXPECT_FALSE(session_->GetTransportProxy("audio")->impl()->HasChannel(2)); 3073 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == NULL);
2974 EXPECT_FALSE(session_->GetTransportProxy("video")->impl()->HasChannel(2)); 3074 EXPECT_TRUE(session_->video_rtcp_transport_channel() == NULL);
2975 } 3075 }
2976 3076
2977 // This test verifies that SetLocalDescription and SetRemoteDescription fails 3077 // This test verifies that SetLocalDescription and SetRemoteDescription fails
2978 // if BUNDLE is enabled but rtcp-mux is disabled in m-lines. 3078 // if BUNDLE is enabled but rtcp-mux is disabled in m-lines.
2979 TEST_F(WebRtcSessionTest, TestDisabledRtcpMuxWithBundleEnabled) { 3079 TEST_F(WebRtcSessionTest, TestDisabledRtcpMuxWithBundleEnabled) {
2980 Init(); 3080 Init();
2981 mediastream_signaling_.SendAudioVideoStream1(); 3081 mediastream_signaling_.SendAudioVideoStream1();
2982 3082
2983 PeerConnectionInterface::RTCOfferAnswerOptions options; 3083 PeerConnectionInterface::RTCOfferAnswerOptions options;
2984 options.use_rtp_mux = true; 3084 options.use_rtp_mux = true;
2985 3085
2986 SessionDescriptionInterface* offer = CreateOffer(options); 3086 SessionDescriptionInterface* offer = CreateOffer(options);
2987 std::string offer_str; 3087 std::string offer_str;
2988 offer->ToString(&offer_str); 3088 offer->ToString(&offer_str);
2989 // Disable rtcp-mux 3089 // Disable rtcp-mux
2990 const std::string rtcp_mux = "rtcp-mux"; 3090 const std::string rtcp_mux = "rtcp-mux";
2991 const std::string xrtcp_mux = "xrtcp-mux"; 3091 const std::string xrtcp_mux = "xrtcp-mux";
2992 rtc::replace_substrs(rtcp_mux.c_str(), rtcp_mux.length(), 3092 rtc::replace_substrs(rtcp_mux.c_str(), rtcp_mux.length(),
2993 xrtcp_mux.c_str(), xrtcp_mux.length(), 3093 xrtcp_mux.c_str(), xrtcp_mux.length(),
2994 &offer_str); 3094 &offer_str);
2995 JsepSessionDescription *local_offer = 3095 JsepSessionDescription* local_offer =
2996 new JsepSessionDescription(JsepSessionDescription::kOffer); 3096 new JsepSessionDescription(JsepSessionDescription::kOffer);
2997 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL)); 3097 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL));
2998 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer); 3098 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer);
2999 JsepSessionDescription *remote_offer = 3099 JsepSessionDescription* remote_offer =
3000 new JsepSessionDescription(JsepSessionDescription::kOffer); 3100 new JsepSessionDescription(JsepSessionDescription::kOffer);
3001 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL)); 3101 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL));
3002 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer); 3102 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer);
3003 // Trying unmodified SDP. 3103 // Trying unmodified SDP.
3004 SetLocalDescriptionWithoutError(offer); 3104 SetLocalDescriptionWithoutError(offer);
3005 } 3105 }
3006 3106
3007 TEST_F(WebRtcSessionTest, SetAudioPlayout) { 3107 TEST_F(WebRtcSessionTest, SetAudioPlayout) {
3008 Init(); 3108 Init();
3009 mediastream_signaling_.SendAudioVideoStream1(); 3109 mediastream_signaling_.SendAudioVideoStream1();
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
3252 candidate.set_component(1); 3352 candidate.set_component(1);
3253 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0, 3353 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0,
3254 candidate); 3354 candidate);
3255 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); 3355 EXPECT_TRUE(offer->AddCandidate(&ice_candidate));
3256 cricket::Candidate candidate1; 3356 cricket::Candidate candidate1;
3257 candidate1.set_component(1); 3357 candidate1.set_component(1);
3258 JsepIceCandidate ice_candidate1(kMediaContentName1, kMediaContentIndex1, 3358 JsepIceCandidate ice_candidate1(kMediaContentName1, kMediaContentIndex1,
3259 candidate1); 3359 candidate1);
3260 EXPECT_TRUE(offer->AddCandidate(&ice_candidate1)); 3360 EXPECT_TRUE(offer->AddCandidate(&ice_candidate1));
3261 SetRemoteDescriptionWithoutError(offer); 3361 SetRemoteDescriptionWithoutError(offer);
3262 ASSERT_TRUE(session_->GetTransportProxy("audio") != NULL); 3362 ASSERT_TRUE(session_->voice_rtp_transport_channel() != NULL);
3263 ASSERT_TRUE(session_->GetTransportProxy("video") != NULL); 3363 ASSERT_TRUE(session_->video_rtp_transport_channel() != NULL);
3264 3364
3265 // Pump for 1 second and verify that no candidates are generated. 3365 // Pump for 1 second and verify that no candidates are generated.
3266 rtc::Thread::Current()->ProcessMessages(1000); 3366 rtc::Thread::Current()->ProcessMessages(1000);
3267 EXPECT_TRUE(observer_.mline_0_candidates_.empty()); 3367 EXPECT_TRUE(observer_.mline_0_candidates_.empty());
3268 EXPECT_TRUE(observer_.mline_1_candidates_.empty()); 3368 EXPECT_TRUE(observer_.mline_1_candidates_.empty());
3269 3369
3270 SessionDescriptionInterface* answer = CreateAnswer(NULL); 3370 SessionDescriptionInterface* answer = CreateAnswer(NULL);
3271 SetLocalDescriptionWithoutError(answer); 3371 SetLocalDescriptionWithoutError(answer);
3272 EXPECT_TRUE(session_->GetTransportProxy("audio")->negotiated());
3273 EXPECT_TRUE(session_->GetTransportProxy("video")->negotiated());
3274 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); 3372 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout);
3275 } 3373 }
3276 3374
3277 // This test verifies that crypto parameter is updated in local session 3375 // This test verifies that crypto parameter is updated in local session
3278 // description as per security policy set in MediaSessionDescriptionFactory. 3376 // description as per security policy set in MediaSessionDescriptionFactory.
3279 TEST_F(WebRtcSessionTest, TestCryptoAfterSetLocalDescription) { 3377 TEST_F(WebRtcSessionTest, TestCryptoAfterSetLocalDescription) {
3280 Init(); 3378 Init();
3281 mediastream_signaling_.SendAudioVideoStream1(); 3379 mediastream_signaling_.SendAudioVideoStream1();
3282 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3380 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3283 3381
(...skipping 14 matching lines...) Expand all
3298 options_.disable_encryption = true; 3396 options_.disable_encryption = true;
3299 Init(); 3397 Init();
3300 mediastream_signaling_.SendAudioVideoStream1(); 3398 mediastream_signaling_.SendAudioVideoStream1();
3301 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3399 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3302 3400
3303 // Making sure SetLocalDescription correctly sets crypto value in 3401 // Making sure SetLocalDescription correctly sets crypto value in
3304 // SessionDescription object after de-serialization of sdp string. The value 3402 // SessionDescription object after de-serialization of sdp string. The value
3305 // will be set as per MediaSessionDescriptionFactory. 3403 // will be set as per MediaSessionDescriptionFactory.
3306 std::string offer_str; 3404 std::string offer_str;
3307 offer->ToString(&offer_str); 3405 offer->ToString(&offer_str);
3308 SessionDescriptionInterface *jsep_offer_str = 3406 SessionDescriptionInterface* jsep_offer_str =
3309 CreateSessionDescription(JsepSessionDescription::kOffer, offer_str, NULL); 3407 CreateSessionDescription(JsepSessionDescription::kOffer, offer_str, NULL);
3310 SetLocalDescriptionWithoutError(jsep_offer_str); 3408 SetLocalDescriptionWithoutError(jsep_offer_str);
3311 EXPECT_FALSE(session_->voice_channel()->secure_required()); 3409 EXPECT_FALSE(session_->voice_channel()->secure_required());
3312 EXPECT_FALSE(session_->video_channel()->secure_required()); 3410 EXPECT_FALSE(session_->video_channel()->secure_required());
3313 } 3411 }
3314 3412
3315 // This test verifies that an answer contains new ufrag and password if an offer 3413 // This test verifies that an answer contains new ufrag and password if an offer
3316 // with new ufrag and password is received. 3414 // with new ufrag and password is received.
3317 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) { 3415 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) {
3318 Init(); 3416 Init();
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
3651 3749
3652 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3750 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3653 EXPECT_TRUE(offer == NULL); 3751 EXPECT_TRUE(offer == NULL);
3654 } 3752 }
3655 3753
3656 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made 3754 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made
3657 // before async identity generation is finished. 3755 // before async identity generation is finished.
3658 TEST_P(WebRtcSessionTest, 3756 TEST_P(WebRtcSessionTest,
3659 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) { 3757 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) {
3660 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3758 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3661 VerifyMultipleAsyncCreateDescription( 3759 VerifyMultipleAsyncCreateDescription(GetParam(),
3662 GetParam(), CreateSessionDescriptionRequest::kOffer); 3760 CreateSessionDescriptionRequest::kOffer);
3663 } 3761 }
3664 3762
3665 // Verifies that CreateOffer fails when Multiple CreateOffer calls are made 3763 // Verifies that CreateOffer fails when Multiple CreateOffer calls are made
3666 // before async identity generation fails. 3764 // before async identity generation fails.
3667 TEST_F(WebRtcSessionTest, 3765 TEST_F(WebRtcSessionTest,
3668 TestMultipleCreateOfferBeforeIdentityRequestReturnFailure) { 3766 TestMultipleCreateOfferBeforeIdentityRequestReturnFailure) {
3669 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3767 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3670 VerifyMultipleAsyncCreateDescriptionIdentityGenFailure( 3768 VerifyMultipleAsyncCreateDescriptionIdentityGenFailure(
3671 CreateSessionDescriptionRequest::kOffer); 3769 CreateSessionDescriptionRequest::kOffer);
3672 } 3770 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
3879 SessionDescriptionInterface* offer = CreateOffer(options); 3977 SessionDescriptionInterface* offer = CreateOffer(options);
3880 SetLocalDescriptionWithoutError(offer); 3978 SetLocalDescriptionWithoutError(offer);
3881 3979
3882 session_->video_channel()->SetOption(cricket::BaseChannel::ST_RTP, 3980 session_->video_channel()->SetOption(cricket::BaseChannel::ST_RTP,
3883 rtc::Socket::Option::OPT_SNDBUF, 4000); 3981 rtc::Socket::Option::OPT_SNDBUF, 4000);
3884 3982
3885 session_->voice_channel()->SetOption(cricket::BaseChannel::ST_RTP, 3983 session_->voice_channel()->SetOption(cricket::BaseChannel::ST_RTP,
3886 rtc::Socket::Option::OPT_RCVBUF, 8000); 3984 rtc::Socket::Option::OPT_RCVBUF, 8000);
3887 3985
3888 int option_val; 3986 int option_val;
3889 EXPECT_TRUE(session_->video_channel()->transport_channel()->GetOption( 3987 EXPECT_TRUE(session_->video_rtp_transport_channel()->GetOption(
3890 rtc::Socket::Option::OPT_SNDBUF, &option_val)); 3988 rtc::Socket::Option::OPT_SNDBUF, &option_val));
3891 EXPECT_EQ(4000, option_val); 3989 EXPECT_EQ(4000, option_val);
3892 EXPECT_FALSE(session_->voice_channel()->transport_channel()->GetOption( 3990 EXPECT_FALSE(session_->voice_rtp_transport_channel()->GetOption(
3893 rtc::Socket::Option::OPT_SNDBUF, &option_val)); 3991 rtc::Socket::Option::OPT_SNDBUF, &option_val));
3894 3992
3895 EXPECT_TRUE(session_->voice_channel()->transport_channel()->GetOption( 3993 EXPECT_TRUE(session_->voice_rtp_transport_channel()->GetOption(
3896 rtc::Socket::Option::OPT_RCVBUF, &option_val)); 3994 rtc::Socket::Option::OPT_RCVBUF, &option_val));
3897 EXPECT_EQ(8000, option_val); 3995 EXPECT_EQ(8000, option_val);
3898 EXPECT_FALSE(session_->video_channel()->transport_channel()->GetOption( 3996 EXPECT_FALSE(session_->video_rtp_transport_channel()->GetOption(
3899 rtc::Socket::Option::OPT_RCVBUF, &option_val)); 3997 rtc::Socket::Option::OPT_RCVBUF, &option_val));
3900 3998
3901 EXPECT_NE(session_->voice_channel()->transport_channel(), 3999 EXPECT_NE(session_->voice_rtp_transport_channel(),
3902 session_->video_channel()->transport_channel()); 4000 session_->video_rtp_transport_channel());
3903 4001
3904 mediastream_signaling_.SendAudioVideoStream2(); 4002 mediastream_signaling_.SendAudioVideoStream2();
3905 SessionDescriptionInterface* answer = 4003 SessionDescriptionInterface* answer =
3906 CreateRemoteAnswer(session_->local_description()); 4004 CreateRemoteAnswer(session_->local_description());
3907 SetRemoteDescriptionWithoutError(answer); 4005 SetRemoteDescriptionWithoutError(answer);
3908 4006
3909 EXPECT_TRUE(session_->voice_channel()->transport_channel()->GetOption( 4007 EXPECT_TRUE(session_->voice_rtp_transport_channel()->GetOption(
3910 rtc::Socket::Option::OPT_SNDBUF, &option_val)); 4008 rtc::Socket::Option::OPT_SNDBUF, &option_val));
3911 EXPECT_EQ(4000, option_val); 4009 EXPECT_EQ(4000, option_val);
3912 4010
3913 EXPECT_TRUE(session_->voice_channel()->transport_channel()->GetOption( 4011 EXPECT_TRUE(session_->voice_rtp_transport_channel()->GetOption(
3914 rtc::Socket::Option::OPT_RCVBUF, &option_val)); 4012 rtc::Socket::Option::OPT_RCVBUF, &option_val));
3915 EXPECT_EQ(8000, option_val); 4013 EXPECT_EQ(8000, option_val);
3916 } 4014 }
3917 4015
3918 // Test creating a session, request multiple offers, destroy the session 4016 // Test creating a session, request multiple offers, destroy the session
3919 // and make sure we got success/failure callbacks for all of the requests. 4017 // and make sure we got success/failure callbacks for all of the requests.
3920 // Background: crbug.com/507307 4018 // Background: crbug.com/507307
3921 TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) { 4019 TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) {
3922 Init(); 4020 Init();
3923 4021
(...skipping 15 matching lines...) Expand all
3939 // must have received a notification which, so the only invalid state 4037 // must have received a notification which, so the only invalid state
3940 // is kInit. 4038 // is kInit.
3941 EXPECT_NE(WebRtcSessionCreateSDPObserverForTest::kInit, o->state()); 4039 EXPECT_NE(WebRtcSessionCreateSDPObserverForTest::kInit, o->state());
3942 } 4040 }
3943 } 4041 }
3944 4042
3945 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test 4043 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test
3946 // currently fails because upon disconnection and reconnection OnIceComplete is 4044 // currently fails because upon disconnection and reconnection OnIceComplete is
3947 // called more than once without returning to IceGatheringGathering. 4045 // called more than once without returning to IceGatheringGathering.
3948 4046
3949 INSTANTIATE_TEST_CASE_P( 4047 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests,
3950 WebRtcSessionTests, WebRtcSessionTest, 4048 WebRtcSessionTest,
3951 testing::Values(ALREADY_GENERATED, DTLS_IDENTITY_STORE)); 4049 testing::Values(ALREADY_GENERATED,
4050 DTLS_IDENTITY_STORE));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698