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

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

Issue 1269843005: Added DtlsCertificate, a ref counted object owning an SSLIdentity (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: webrtcsession_unittest cleanup Created 5 years, 4 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 "talk/app/webrtc/audiotrack.h" 28 #include "talk/app/webrtc/audiotrack.h"
29 #include "talk/app/webrtc/dtlscertificate.h"
29 #include "talk/app/webrtc/fakemetricsobserver.h" 30 #include "talk/app/webrtc/fakemetricsobserver.h"
30 #include "talk/app/webrtc/jsepicecandidate.h" 31 #include "talk/app/webrtc/jsepicecandidate.h"
31 #include "talk/app/webrtc/jsepsessiondescription.h" 32 #include "talk/app/webrtc/jsepsessiondescription.h"
32 #include "talk/app/webrtc/mediastreamsignaling.h" 33 #include "talk/app/webrtc/mediastreamsignaling.h"
33 #include "talk/app/webrtc/streamcollection.h" 34 #include "talk/app/webrtc/streamcollection.h"
34 #include "talk/app/webrtc/test/fakeconstraints.h" 35 #include "talk/app/webrtc/test/fakeconstraints.h"
35 #include "talk/app/webrtc/test/fakedtlsidentityservice.h" 36 #include "talk/app/webrtc/test/fakedtlsidentityservice.h"
36 #include "talk/app/webrtc/test/fakemediastreamsignaling.h" 37 #include "talk/app/webrtc/test/fakemediastreamsignaling.h"
37 #include "talk/app/webrtc/videotrack.h" 38 #include "talk/app/webrtc/videotrack.h"
38 #include "talk/app/webrtc/webrtcsession.h" 39 #include "talk/app/webrtc/webrtcsession.h"
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 EXPECT_TRUE(channel_manager_->Init()); 352 EXPECT_TRUE(channel_manager_->Init());
352 desc_factory_->set_add_legacy_streams(false); 353 desc_factory_->set_add_legacy_streams(false);
353 allocator_->set_step_delay(cricket::kMinimumStepDelay); 354 allocator_->set_step_delay(cricket::kMinimumStepDelay);
354 } 355 }
355 356
356 void AddInterface(const SocketAddress& addr) { 357 void AddInterface(const SocketAddress& addr) {
357 network_manager_.AddInterface(addr); 358 network_manager_.AddInterface(addr);
358 } 359 }
359 360
360 void Init( 361 void Init(
361 DTLSIdentityServiceInterface* identity_service, 362 rtc::scoped_refptr<webrtc::DtlsCertificate> certificate,
362 const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { 363 const PeerConnectionInterface::RTCConfiguration& rtc_configuration) {
363 ASSERT_TRUE(session_.get() == NULL); 364 ASSERT_TRUE(session_.get() == NULL);
364 session_.reset(new WebRtcSessionForTest( 365 session_.reset(new WebRtcSessionForTest(
365 channel_manager_.get(), rtc::Thread::Current(), 366 channel_manager_.get(), rtc::Thread::Current(),
366 rtc::Thread::Current(), allocator_.get(), 367 rtc::Thread::Current(), allocator_.get(),
367 &observer_, 368 &observer_,
368 &mediastream_signaling_)); 369 &mediastream_signaling_));
369 370
370 EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew, 371 EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew,
371 observer_.ice_connection_state_); 372 observer_.ice_connection_state_);
372 EXPECT_EQ(PeerConnectionInterface::kIceGatheringNew, 373 EXPECT_EQ(PeerConnectionInterface::kIceGatheringNew,
373 observer_.ice_gathering_state_); 374 observer_.ice_gathering_state_);
374 375
375 EXPECT_TRUE(session_->Initialize(options_, constraints_.get(), 376 EXPECT_TRUE(session_->Initialize(options_, constraints_.get(),
376 identity_service, rtc_configuration)); 377 certificate, rtc_configuration));
377 session_->set_metrics_observer(metrics_observer_); 378 session_->set_metrics_observer(metrics_observer_);
378 } 379 }
379 380
380 void Init() { 381 void Init() {
381 PeerConnectionInterface::RTCConfiguration configuration; 382 PeerConnectionInterface::RTCConfiguration configuration;
382 Init(NULL, configuration); 383 Init(NULL, configuration);
383 } 384 }
384 385
385 void InitWithIceTransport( 386 void InitWithIceTransport(
386 PeerConnectionInterface::IceTransportsType ice_transport_type) { 387 PeerConnectionInterface::IceTransportsType ice_transport_type) {
387 PeerConnectionInterface::RTCConfiguration configuration; 388 PeerConnectionInterface::RTCConfiguration configuration;
388 configuration.type = ice_transport_type; 389 configuration.type = ice_transport_type;
389 Init(NULL, configuration); 390 Init(NULL, configuration);
390 } 391 }
391 392
392 void InitWithBundlePolicy( 393 void InitWithBundlePolicy(
393 PeerConnectionInterface::BundlePolicy bundle_policy) { 394 PeerConnectionInterface::BundlePolicy bundle_policy) {
394 PeerConnectionInterface::RTCConfiguration configuration; 395 PeerConnectionInterface::RTCConfiguration configuration;
395 configuration.bundle_policy = bundle_policy; 396 configuration.bundle_policy = bundle_policy;
396 Init(NULL, configuration); 397 Init(NULL, configuration);
397 } 398 }
398 399
399 void InitWithRtcpMuxPolicy( 400 void InitWithRtcpMuxPolicy(
400 PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) { 401 PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) {
401 PeerConnectionInterface::RTCConfiguration configuration; 402 PeerConnectionInterface::RTCConfiguration configuration;
402 configuration.rtcp_mux_policy = rtcp_mux_policy; 403 configuration.rtcp_mux_policy = rtcp_mux_policy;
403 Init(NULL, configuration); 404 Init(NULL, configuration);
404 } 405 }
405 406
406 void InitWithDtls(bool identity_request_should_fail = false) { 407 void InitWithCertificate() {
407 FakeIdentityService* identity_service = new FakeIdentityService();
408 identity_service->set_should_fail(identity_request_should_fail);
409 PeerConnectionInterface::RTCConfiguration configuration; 408 PeerConnectionInterface::RTCConfiguration configuration;
410 Init(identity_service, configuration); 409 Init(FakeIdentityService::GenerateCertificate(), configuration);
411 } 410 }
412 411
413 void InitWithDtmfCodec() { 412 void InitWithDtmfCodec() {
414 // Add kTelephoneEventCodec for dtmf test. 413 // Add kTelephoneEventCodec for dtmf test.
415 const cricket::AudioCodec kTelephoneEventCodec( 414 const cricket::AudioCodec kTelephoneEventCodec(
416 106, "telephone-event", 8000, 0, 1, 0); 415 106, "telephone-event", 8000, 0, 1, 0);
417 std::vector<cricket::AudioCodec> codecs; 416 std::vector<cricket::AudioCodec> codecs;
418 codecs.push_back(kTelephoneEventCodec); 417 codecs.push_back(kTelephoneEventCodec);
419 media_engine_->SetAudioCodecs(codecs); 418 media_engine_->SetAudioCodecs(codecs);
420 desc_factory_->set_audio_codecs(codecs); 419 desc_factory_->set_audio_codecs(codecs);
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 1174
1176 void SetLocalDescriptionWithDataChannel() { 1175 void SetLocalDescriptionWithDataChannel() {
1177 webrtc::InternalDataChannelInit dci; 1176 webrtc::InternalDataChannelInit dci;
1178 dci.reliable = false; 1177 dci.reliable = false;
1179 session_->CreateDataChannel("datachannel", &dci); 1178 session_->CreateDataChannel("datachannel", &dci);
1180 SessionDescriptionInterface* offer = CreateOffer(); 1179 SessionDescriptionInterface* offer = CreateOffer();
1181 SetLocalDescriptionWithoutError(offer); 1180 SetLocalDescriptionWithoutError(offer);
1182 } 1181 }
1183 1182
1184 void VerifyMultipleAsyncCreateDescription( 1183 void VerifyMultipleAsyncCreateDescription(
1185 bool success, CreateSessionDescriptionRequest::Type type) { 1184 CreateSessionDescriptionRequest::Type type) {
1186 InitWithDtls(!success); 1185 InitWithCertificate();
1187 SetFactoryDtlsSrtp(); 1186 SetFactoryDtlsSrtp();
1188 if (type == CreateSessionDescriptionRequest::kAnswer) { 1187 if (type == CreateSessionDescriptionRequest::kAnswer) {
1189 cricket::MediaSessionOptions options; 1188 cricket::MediaSessionOptions options;
1190 scoped_ptr<JsepSessionDescription> offer( 1189 scoped_ptr<JsepSessionDescription> offer(
1191 CreateRemoteOffer(options, cricket::SEC_DISABLED)); 1190 CreateRemoteOffer(options, cricket::SEC_DISABLED));
1192 ASSERT_TRUE(offer.get() != NULL); 1191 ASSERT_TRUE(offer.get() != NULL);
1193 SetRemoteDescriptionWithoutError(offer.release()); 1192 SetRemoteDescriptionWithoutError(offer.release());
1194 } 1193 }
1195 1194
1196 PeerConnectionInterface::RTCOfferAnswerOptions options; 1195 PeerConnectionInterface::RTCOfferAnswerOptions options;
1197 const int kNumber = 3; 1196 const int kNumber = 3;
1198 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> 1197 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest>
1199 observers[kNumber]; 1198 observers[kNumber];
1200 for (int i = 0; i < kNumber; ++i) { 1199 for (int i = 0; i < kNumber; ++i) {
1201 observers[i] = new WebRtcSessionCreateSDPObserverForTest(); 1200 observers[i] = new WebRtcSessionCreateSDPObserverForTest();
1202 if (type == CreateSessionDescriptionRequest::kOffer) { 1201 if (type == CreateSessionDescriptionRequest::kOffer) {
1203 session_->CreateOffer(observers[i], options); 1202 session_->CreateOffer(observers[i], options);
1204 } else { 1203 } else {
1205 session_->CreateAnswer(observers[i], NULL); 1204 session_->CreateAnswer(observers[i], NULL);
1206 } 1205 }
1207 } 1206 }
1208 1207
1209 WebRtcSessionCreateSDPObserverForTest::State expected_state =
1210 success ? WebRtcSessionCreateSDPObserverForTest::kSucceeded :
1211 WebRtcSessionCreateSDPObserverForTest::kFailed;
1212
1213 for (int i = 0; i < kNumber; ++i) { 1208 for (int i = 0; i < kNumber; ++i) {
1214 EXPECT_EQ_WAIT(expected_state, observers[i]->state(), 1000); 1209 EXPECT_EQ_WAIT(WebRtcSessionCreateSDPObserverForTest::kSucceeded,
1215 if (success) { 1210 observers[i]->state(), 1000);
1216 EXPECT_TRUE(observers[i]->description() != NULL); 1211 EXPECT_TRUE(observers[i]->description() != NULL);
1217 } else {
1218 EXPECT_TRUE(observers[i]->description() == NULL);
1219 }
1220 } 1212 }
1221 } 1213 }
1222 1214
1223 void ConfigureAllocatorWithTurn() { 1215 void ConfigureAllocatorWithTurn() {
1224 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN); 1216 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN);
1225 cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); 1217 cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword);
1226 relay_server.credentials = credentials; 1218 relay_server.credentials = credentials;
1227 relay_server.ports.push_back(cricket::ProtocolAddress( 1219 relay_server.ports.push_back(cricket::ProtocolAddress(
1228 kTurnUdpIntAddr, cricket::PROTO_UDP, false)); 1220 kTurnUdpIntAddr, cricket::PROTO_UDP, false));
1229 allocator_->AddRelay(relay_server); 1221 allocator_->AddRelay(relay_server);
(...skipping 21 matching lines...) Expand all
1251 PeerConnectionFactoryInterface::Options options_; 1243 PeerConnectionFactoryInterface::Options options_;
1252 rtc::scoped_ptr<FakeConstraints> constraints_; 1244 rtc::scoped_ptr<FakeConstraints> constraints_;
1253 FakeMediaStreamSignaling mediastream_signaling_; 1245 FakeMediaStreamSignaling mediastream_signaling_;
1254 rtc::scoped_ptr<WebRtcSessionForTest> session_; 1246 rtc::scoped_ptr<WebRtcSessionForTest> session_;
1255 MockIceObserver observer_; 1247 MockIceObserver observer_;
1256 cricket::FakeVideoMediaChannel* video_channel_; 1248 cricket::FakeVideoMediaChannel* video_channel_;
1257 cricket::FakeVoiceMediaChannel* voice_channel_; 1249 cricket::FakeVoiceMediaChannel* voice_channel_;
1258 rtc::scoped_refptr<FakeMetricsObserver> metrics_observer_; 1250 rtc::scoped_refptr<FakeMetricsObserver> metrics_observer_;
1259 }; 1251 };
1260 1252
1261 TEST_F(WebRtcSessionTest, TestInitializeWithDtls) { 1253 TEST_F(WebRtcSessionTest, TestInitializeWithCertificate) {
1262 InitWithDtls(); 1254 InitWithCertificate();
1263 // SDES is disabled when DTLS is on. 1255 // SDES is disabled when DTLS is on.
1264 EXPECT_EQ(cricket::SEC_DISABLED, session_->SdesPolicy()); 1256 EXPECT_EQ(cricket::SEC_DISABLED, session_->SdesPolicy());
1265 } 1257 }
1266 1258
1267 TEST_F(WebRtcSessionTest, TestInitializeWithoutDtls) { 1259 TEST_F(WebRtcSessionTest, TestInitializeWithoutDtls) {
1268 Init(); 1260 Init();
1269 // SDES is required if DTLS is off. 1261 // SDES is required if DTLS is off.
1270 EXPECT_EQ(cricket::SEC_REQUIRED, session_->SdesPolicy()); 1262 EXPECT_EQ(cricket::SEC_REQUIRED, session_->SdesPolicy());
1271 } 1263 }
1272 1264
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 // the offer. 1554 // the offer.
1563 SetLocalDescriptionWithoutError(offer); 1555 SetLocalDescriptionWithoutError(offer);
1564 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); 1556 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer);
1565 } 1557 }
1566 1558
1567 // Test that we accept an offer with a DTLS fingerprint when DTLS is on 1559 // Test that we accept an offer with a DTLS fingerprint when DTLS is on
1568 // and that we return an answer with a DTLS fingerprint. 1560 // and that we return an answer with a DTLS fingerprint.
1569 TEST_F(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { 1561 TEST_F(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) {
1570 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1562 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1571 mediastream_signaling_.SendAudioVideoStream1(); 1563 mediastream_signaling_.SendAudioVideoStream1();
1572 InitWithDtls(); 1564 InitWithCertificate();
1573 SetFactoryDtlsSrtp(); 1565 SetFactoryDtlsSrtp();
1574 cricket::MediaSessionOptions options; 1566 cricket::MediaSessionOptions options;
1575 options.recv_video = true; 1567 options.recv_video = true;
1576 JsepSessionDescription* offer = 1568 JsepSessionDescription* offer =
1577 CreateRemoteOffer(options, cricket::SEC_DISABLED); 1569 CreateRemoteOffer(options, cricket::SEC_DISABLED);
1578 ASSERT_TRUE(offer != NULL); 1570 ASSERT_TRUE(offer != NULL);
1579 VerifyFingerprintStatus(offer->description(), true); 1571 VerifyFingerprintStatus(offer->description(), true);
1580 VerifyNoCryptoParams(offer->description(), true); 1572 VerifyNoCryptoParams(offer->description(), true);
1581 1573
1582 // SetRemoteDescription will take the ownership of the offer. 1574 // SetRemoteDescription will take the ownership of the offer.
1583 SetRemoteDescriptionWithoutError(offer); 1575 SetRemoteDescriptionWithoutError(offer);
1584 1576
1585 // Verify that we get a crypto fingerprint in the answer. 1577 // Verify that we get a crypto fingerprint in the answer.
1586 SessionDescriptionInterface* answer = CreateAnswer(NULL); 1578 SessionDescriptionInterface* answer = CreateAnswer(NULL);
1587 ASSERT_TRUE(answer != NULL); 1579 ASSERT_TRUE(answer != NULL);
1588 VerifyFingerprintStatus(answer->description(), true); 1580 VerifyFingerprintStatus(answer->description(), true);
1589 // Check that we don't have an a=crypto line in the answer. 1581 // Check that we don't have an a=crypto line in the answer.
1590 VerifyNoCryptoParams(answer->description(), true); 1582 VerifyNoCryptoParams(answer->description(), true);
1591 1583
1592 // Now set the local description, which should work, even without a=crypto. 1584 // Now set the local description, which should work, even without a=crypto.
1593 SetLocalDescriptionWithoutError(answer); 1585 SetLocalDescriptionWithoutError(answer);
1594 } 1586 }
1595 1587
1596 // Test that we set a local offer with a DTLS fingerprint when DTLS is on 1588 // Test that we set a local offer with a DTLS fingerprint when DTLS is on
1597 // and then we accept a remote answer with a DTLS fingerprint successfully. 1589 // and then we accept a remote answer with a DTLS fingerprint successfully.
1598 TEST_F(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { 1590 TEST_F(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) {
1599 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1591 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1600 mediastream_signaling_.SendAudioVideoStream1(); 1592 mediastream_signaling_.SendAudioVideoStream1();
1601 InitWithDtls(); 1593 InitWithCertificate();
1602 SetFactoryDtlsSrtp(); 1594 SetFactoryDtlsSrtp();
1603 1595
1604 // Verify that we get a crypto fingerprint in the answer. 1596 // Verify that we get a crypto fingerprint in the answer.
1605 SessionDescriptionInterface* offer = CreateOffer(); 1597 SessionDescriptionInterface* offer = CreateOffer();
1606 ASSERT_TRUE(offer != NULL); 1598 ASSERT_TRUE(offer != NULL);
1607 VerifyFingerprintStatus(offer->description(), true); 1599 VerifyFingerprintStatus(offer->description(), true);
1608 // Check that we don't have an a=crypto line in the offer. 1600 // Check that we don't have an a=crypto line in the offer.
1609 VerifyNoCryptoParams(offer->description(), true); 1601 VerifyNoCryptoParams(offer->description(), true);
1610 1602
1611 // Now set the local description, which should work, even without a=crypto. 1603 // Now set the local description, which should work, even without a=crypto.
1612 SetLocalDescriptionWithoutError(offer); 1604 SetLocalDescriptionWithoutError(offer);
1613 1605
1614 cricket::MediaSessionOptions options; 1606 cricket::MediaSessionOptions options;
1615 options.recv_video = true; 1607 options.recv_video = true;
1616 JsepSessionDescription* answer = 1608 JsepSessionDescription* answer =
1617 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); 1609 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
1618 ASSERT_TRUE(answer != NULL); 1610 ASSERT_TRUE(answer != NULL);
1619 VerifyFingerprintStatus(answer->description(), true); 1611 VerifyFingerprintStatus(answer->description(), true);
1620 VerifyNoCryptoParams(answer->description(), true); 1612 VerifyNoCryptoParams(answer->description(), true);
1621 1613
1622 // SetRemoteDescription will take the ownership of the answer. 1614 // SetRemoteDescription will take the ownership of the answer.
1623 SetRemoteDescriptionWithoutError(answer); 1615 SetRemoteDescriptionWithoutError(answer);
1624 } 1616 }
1625 1617
1626 // Test that if we support DTLS and the other side didn't offer a fingerprint, 1618 // Test that if we support DTLS and the other side didn't offer a fingerprint,
1627 // we will fail to set the remote description. 1619 // we will fail to set the remote description.
1628 TEST_F(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { 1620 TEST_F(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) {
1629 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1621 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1630 InitWithDtls(); 1622 InitWithCertificate();
1631 cricket::MediaSessionOptions options; 1623 cricket::MediaSessionOptions options;
1632 options.recv_video = true; 1624 options.recv_video = true;
1633 options.bundle_enabled = true; 1625 options.bundle_enabled = true;
1634 JsepSessionDescription* offer = CreateRemoteOffer( 1626 JsepSessionDescription* offer = CreateRemoteOffer(
1635 options, cricket::SEC_REQUIRED); 1627 options, cricket::SEC_REQUIRED);
1636 ASSERT_TRUE(offer != NULL); 1628 ASSERT_TRUE(offer != NULL);
1637 VerifyFingerprintStatus(offer->description(), false); 1629 VerifyFingerprintStatus(offer->description(), false);
1638 VerifyCryptoParams(offer->description()); 1630 VerifyCryptoParams(offer->description());
1639 1631
1640 // SetRemoteDescription will take the ownership of the offer. 1632 // SetRemoteDescription will take the ownership of the offer.
1641 SetRemoteDescriptionOfferExpectError( 1633 SetRemoteDescriptionOfferExpectError(
1642 kSdpWithoutDtlsFingerprint, offer); 1634 kSdpWithoutDtlsFingerprint, offer);
1643 1635
1644 offer = CreateRemoteOffer(options, cricket::SEC_REQUIRED); 1636 offer = CreateRemoteOffer(options, cricket::SEC_REQUIRED);
1645 // SetLocalDescription will take the ownership of the offer. 1637 // SetLocalDescription will take the ownership of the offer.
1646 SetLocalDescriptionOfferExpectError( 1638 SetLocalDescriptionOfferExpectError(
1647 kSdpWithoutDtlsFingerprint, offer); 1639 kSdpWithoutDtlsFingerprint, offer);
1648 } 1640 }
1649 1641
1650 // Test that we return a failure when applying a local answer that doesn't have 1642 // Test that we return a failure when applying a local answer that doesn't have
1651 // a DTLS fingerprint when DTLS is required. 1643 // a DTLS fingerprint when DTLS is required.
1652 TEST_F(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { 1644 TEST_F(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) {
1653 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1645 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1654 InitWithDtls(); 1646 InitWithCertificate();
1655 SessionDescriptionInterface* offer = NULL; 1647 SessionDescriptionInterface* offer = NULL;
1656 SessionDescriptionInterface* answer = NULL; 1648 SessionDescriptionInterface* answer = NULL;
1657 CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer); 1649 CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer);
1658 1650
1659 // SetRemoteDescription and SetLocalDescription will take the ownership of 1651 // SetRemoteDescription and SetLocalDescription will take the ownership of
1660 // the offer and answer. 1652 // the offer and answer.
1661 SetRemoteDescriptionWithoutError(offer); 1653 SetRemoteDescriptionWithoutError(offer);
1662 SetLocalDescriptionAnswerExpectError( 1654 SetLocalDescriptionAnswerExpectError(
1663 kSdpWithoutDtlsFingerprint, answer); 1655 kSdpWithoutDtlsFingerprint, answer);
1664 } 1656 }
1665 1657
1666 // Test that we return a failure when applying a remote answer that doesn't have 1658 // Test that we return a failure when applying a remote answer that doesn't have
1667 // a DTLS fingerprint when DTLS is required. 1659 // a DTLS fingerprint when DTLS is required.
1668 TEST_F(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { 1660 TEST_F(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) {
1669 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 1661 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
1670 // Enable both SDES and DTLS, so that offer won't be outright rejected as a 1662 // Enable both SDES and DTLS, so that offer won't be outright rejected as a
1671 // result of using the "UDP/TLS/RTP/SAVPF" profile. 1663 // result of using the "UDP/TLS/RTP/SAVPF" profile.
1672 InitWithDtls(); 1664 InitWithCertificate();
1673 session_->SetSdesPolicy(cricket::SEC_ENABLED); 1665 session_->SetSdesPolicy(cricket::SEC_ENABLED);
1674 SessionDescriptionInterface* offer = CreateOffer(); 1666 SessionDescriptionInterface* offer = CreateOffer();
1675 cricket::MediaSessionOptions options; 1667 cricket::MediaSessionOptions options;
1676 options.recv_video = true; 1668 options.recv_video = true;
1677 JsepSessionDescription* answer = 1669 JsepSessionDescription* answer =
1678 CreateRemoteAnswer(offer, options, cricket::SEC_ENABLED); 1670 CreateRemoteAnswer(offer, options, cricket::SEC_ENABLED);
1679 1671
1680 // SetRemoteDescription and SetLocalDescription will take the ownership of 1672 // SetRemoteDescription and SetLocalDescription will take the ownership of
1681 // the offer and answer. 1673 // the offer and answer.
1682 SetLocalDescriptionWithoutError(offer); 1674 SetLocalDescriptionWithoutError(offer);
1683 SetRemoteDescriptionAnswerExpectError( 1675 SetRemoteDescriptionAnswerExpectError(
1684 kSdpWithoutDtlsFingerprint, answer); 1676 kSdpWithoutDtlsFingerprint, answer);
1685 } 1677 }
1686 1678
1687 // Test that we create a local offer without SDES or DTLS and accept a remote 1679 // Test that we create a local offer without SDES or DTLS and accept a remote
1688 // answer without SDES or DTLS when encryption is disabled. 1680 // answer without SDES or DTLS when encryption is disabled.
1689 TEST_F(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { 1681 TEST_F(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) {
1690 mediastream_signaling_.SendAudioVideoStream1(); 1682 mediastream_signaling_.SendAudioVideoStream1();
1691 options_.disable_encryption = true; 1683 options_.disable_encryption = true;
1692 InitWithDtls(); 1684 InitWithCertificate();
1693 1685
1694 // Verify that we get a crypto fingerprint in the answer. 1686 // Verify that we get a crypto fingerprint in the answer.
1695 SessionDescriptionInterface* offer = CreateOffer(); 1687 SessionDescriptionInterface* offer = CreateOffer();
1696 ASSERT_TRUE(offer != NULL); 1688 ASSERT_TRUE(offer != NULL);
1697 VerifyFingerprintStatus(offer->description(), false); 1689 VerifyFingerprintStatus(offer->description(), false);
1698 // Check that we don't have an a=crypto line in the offer. 1690 // Check that we don't have an a=crypto line in the offer.
1699 VerifyNoCryptoParams(offer->description(), false); 1691 VerifyNoCryptoParams(offer->description(), false);
1700 1692
1701 // Now set the local description, which should work, even without a=crypto. 1693 // Now set the local description, which should work, even without a=crypto.
1702 SetLocalDescriptionWithoutError(offer); 1694 SetLocalDescriptionWithoutError(offer);
1703 1695
1704 cricket::MediaSessionOptions options; 1696 cricket::MediaSessionOptions options;
1705 options.recv_video = true; 1697 options.recv_video = true;
1706 JsepSessionDescription* answer = 1698 JsepSessionDescription* answer =
1707 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); 1699 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
1708 ASSERT_TRUE(answer != NULL); 1700 ASSERT_TRUE(answer != NULL);
1709 VerifyFingerprintStatus(answer->description(), false); 1701 VerifyFingerprintStatus(answer->description(), false);
1710 VerifyNoCryptoParams(answer->description(), false); 1702 VerifyNoCryptoParams(answer->description(), false);
1711 1703
1712 // SetRemoteDescription will take the ownership of the answer. 1704 // SetRemoteDescription will take the ownership of the answer.
1713 SetRemoteDescriptionWithoutError(answer); 1705 SetRemoteDescriptionWithoutError(answer);
1714 } 1706 }
1715 1707
1716 // Test that we create a local answer without SDES or DTLS and accept a remote 1708 // Test that we create a local answer without SDES or DTLS and accept a remote
1717 // offer without SDES or DTLS when encryption is disabled. 1709 // offer without SDES or DTLS when encryption is disabled.
1718 TEST_F(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) { 1710 TEST_F(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) {
1719 options_.disable_encryption = true; 1711 options_.disable_encryption = true;
1720 InitWithDtls(); 1712 InitWithCertificate();
1721 1713
1722 cricket::MediaSessionOptions options; 1714 cricket::MediaSessionOptions options;
1723 options.recv_video = true; 1715 options.recv_video = true;
1724 JsepSessionDescription* offer = 1716 JsepSessionDescription* offer =
1725 CreateRemoteOffer(options, cricket::SEC_DISABLED); 1717 CreateRemoteOffer(options, cricket::SEC_DISABLED);
1726 ASSERT_TRUE(offer != NULL); 1718 ASSERT_TRUE(offer != NULL);
1727 VerifyFingerprintStatus(offer->description(), false); 1719 VerifyFingerprintStatus(offer->description(), false);
1728 VerifyNoCryptoParams(offer->description(), false); 1720 VerifyNoCryptoParams(offer->description(), false);
1729 1721
1730 // SetRemoteDescription will take the ownership of the offer. 1722 // SetRemoteDescription will take the ownership of the offer.
(...skipping 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after
3411 } 3403 }
3412 3404
3413 TEST_F(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { 3405 TEST_F(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) {
3414 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3406 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3415 3407
3416 constraints_.reset(new FakeConstraints()); 3408 constraints_.reset(new FakeConstraints());
3417 constraints_->AddOptional( 3409 constraints_->AddOptional(
3418 webrtc::MediaConstraintsInterface::kEnableRtpDataChannels, true); 3410 webrtc::MediaConstraintsInterface::kEnableRtpDataChannels, true);
3419 options_.disable_sctp_data_channels = false; 3411 options_.disable_sctp_data_channels = false;
3420 3412
3421 InitWithDtls(); 3413 InitWithCertificate();
3422 3414
3423 SetLocalDescriptionWithDataChannel(); 3415 SetLocalDescriptionWithDataChannel();
3424 EXPECT_EQ(cricket::DCT_RTP, data_engine_->last_channel_type()); 3416 EXPECT_EQ(cricket::DCT_RTP, data_engine_->last_channel_type());
3425 } 3417 }
3426 3418
3427 TEST_F(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { 3419 TEST_F(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) {
3428 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3420 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3429 3421
3430 InitWithDtls(); 3422 InitWithCertificate();
3431 3423
3432 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3424 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3433 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL); 3425 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL);
3434 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL); 3426 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL);
3435 } 3427 }
3436 3428
3437 TEST_F(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { 3429 TEST_F(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) {
3438 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3430 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3439 SetFactoryDtlsSrtp(); 3431 SetFactoryDtlsSrtp();
3440 InitWithDtls(); 3432 InitWithCertificate();
3441 3433
3442 // Create remote offer with SCTP. 3434 // Create remote offer with SCTP.
3443 cricket::MediaSessionOptions options; 3435 cricket::MediaSessionOptions options;
3444 options.data_channel_type = cricket::DCT_SCTP; 3436 options.data_channel_type = cricket::DCT_SCTP;
3445 JsepSessionDescription* offer = 3437 JsepSessionDescription* offer =
3446 CreateRemoteOffer(options, cricket::SEC_DISABLED); 3438 CreateRemoteOffer(options, cricket::SEC_DISABLED);
3447 SetRemoteDescriptionWithoutError(offer); 3439 SetRemoteDescriptionWithoutError(offer);
3448 3440
3449 // Verifies the answer contains SCTP. 3441 // Verifies the answer contains SCTP.
3450 rtc::scoped_ptr<SessionDescriptionInterface> answer(CreateAnswer(NULL)); 3442 rtc::scoped_ptr<SessionDescriptionInterface> answer(CreateAnswer(NULL));
3451 EXPECT_TRUE(answer != NULL); 3443 EXPECT_TRUE(answer != NULL);
3452 EXPECT_TRUE(answer->description()->GetContentByName("data") != NULL); 3444 EXPECT_TRUE(answer->description()->GetContentByName("data") != NULL);
3453 EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL); 3445 EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL);
3454 } 3446 }
3455 3447
3456 TEST_F(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) { 3448 TEST_F(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) {
3457 constraints_.reset(new FakeConstraints()); 3449 constraints_.reset(new FakeConstraints());
3458 constraints_->AddOptional( 3450 constraints_->AddOptional(
3459 webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, false); 3451 webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, false);
3460 InitWithDtls(); 3452 InitWithCertificate();
3461 3453
3462 SetLocalDescriptionWithDataChannel(); 3454 SetLocalDescriptionWithDataChannel();
3463 EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type()); 3455 EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type());
3464 } 3456 }
3465 3457
3466 TEST_F(WebRtcSessionTest, TestSctpDataChannelWithDtls) { 3458 TEST_F(WebRtcSessionTest, TestSctpDataChannelWithDtls) {
3467 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3459 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3468 3460
3469 InitWithDtls(); 3461 InitWithCertificate();
3470 3462
3471 SetLocalDescriptionWithDataChannel(); 3463 SetLocalDescriptionWithDataChannel();
3472 EXPECT_EQ(cricket::DCT_SCTP, data_engine_->last_channel_type()); 3464 EXPECT_EQ(cricket::DCT_SCTP, data_engine_->last_channel_type());
3473 } 3465 }
3474 3466
3475 TEST_F(WebRtcSessionTest, TestDisableSctpDataChannels) { 3467 TEST_F(WebRtcSessionTest, TestDisableSctpDataChannels) {
3476 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3468 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3477 options_.disable_sctp_data_channels = true; 3469 options_.disable_sctp_data_channels = true;
3478 InitWithDtls(); 3470 InitWithCertificate();
3479 3471
3480 SetLocalDescriptionWithDataChannel(); 3472 SetLocalDescriptionWithDataChannel();
3481 EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type()); 3473 EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type());
3482 } 3474 }
3483 3475
3484 TEST_F(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { 3476 TEST_F(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) {
3485 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3477 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3486 const int new_send_port = 9998; 3478 const int new_send_port = 9998;
3487 const int new_recv_port = 7775; 3479 const int new_recv_port = 7775;
3488 3480
3489 InitWithDtls(); 3481 InitWithCertificate();
3490 SetFactoryDtlsSrtp(); 3482 SetFactoryDtlsSrtp();
3491 3483
3492 // By default, don't actually add the codecs to desc_factory_; they don't 3484 // By default, don't actually add the codecs to desc_factory_; they don't
3493 // actually get serialized for SCTP in BuildMediaDescription(). Instead, 3485 // actually get serialized for SCTP in BuildMediaDescription(). Instead,
3494 // let the session description get parsed. That'll get the proper codecs 3486 // let the session description get parsed. That'll get the proper codecs
3495 // into the stream. 3487 // into the stream.
3496 cricket::MediaSessionOptions options; 3488 cricket::MediaSessionOptions options;
3497 JsepSessionDescription* offer = CreateRemoteOfferWithSctpPort( 3489 JsepSessionDescription* offer = CreateRemoteOfferWithSctpPort(
3498 "stream1", new_send_port, options); 3490 "stream1", new_send_port, options);
3499 3491
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3532 ch->recv_codecs()[0].name.c_str())); 3524 ch->recv_codecs()[0].name.c_str()));
3533 EXPECT_TRUE(ch->recv_codecs()[0].GetParam(cricket::kCodecParamPort, 3525 EXPECT_TRUE(ch->recv_codecs()[0].GetParam(cricket::kCodecParamPort,
3534 &portnum)); 3526 &portnum));
3535 EXPECT_EQ(new_recv_port, portnum); 3527 EXPECT_EQ(new_recv_port, portnum);
3536 } 3528 }
3537 3529
3538 // Verifies that CreateOffer succeeds when CreateOffer is called before async 3530 // Verifies that CreateOffer succeeds when CreateOffer is called before async
3539 // identity generation is finished. 3531 // identity generation is finished.
3540 TEST_F(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { 3532 TEST_F(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) {
3541 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3533 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3542 InitWithDtls(); 3534 InitWithCertificate();
3543 3535
3544 EXPECT_TRUE(session_->waiting_for_identity()); 3536 EXPECT_TRUE(session_->waiting_for_certificate());
3545 mediastream_signaling_.SendAudioVideoStream1(); 3537 mediastream_signaling_.SendAudioVideoStream1();
3546 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3538 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3547 3539
3548 EXPECT_TRUE(offer != NULL); 3540 EXPECT_TRUE(offer != NULL);
3549 VerifyNoCryptoParams(offer->description(), true); 3541 VerifyNoCryptoParams(offer->description(), true);
3550 VerifyFingerprintStatus(offer->description(), true); 3542 VerifyFingerprintStatus(offer->description(), true);
3551 } 3543 }
3552 3544
3553 // Verifies that CreateAnswer succeeds when CreateOffer is called before async 3545 // Verifies that CreateAnswer succeeds when CreateOffer is called before async
3554 // identity generation is finished. 3546 // identity generation is finished.
3555 TEST_F(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { 3547 TEST_F(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) {
3556 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3548 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3557 InitWithDtls(); 3549 InitWithCertificate();
3558 SetFactoryDtlsSrtp(); 3550 SetFactoryDtlsSrtp();
3559 3551
3560 cricket::MediaSessionOptions options; 3552 cricket::MediaSessionOptions options;
3561 options.recv_video = true; 3553 options.recv_video = true;
3562 scoped_ptr<JsepSessionDescription> offer( 3554 scoped_ptr<JsepSessionDescription> offer(
3563 CreateRemoteOffer(options, cricket::SEC_DISABLED)); 3555 CreateRemoteOffer(options, cricket::SEC_DISABLED));
3564 ASSERT_TRUE(offer.get() != NULL); 3556 ASSERT_TRUE(offer.get() != NULL);
3565 SetRemoteDescriptionWithoutError(offer.release()); 3557 SetRemoteDescriptionWithoutError(offer.release());
3566 3558
3567 rtc::scoped_ptr<SessionDescriptionInterface> answer(CreateAnswer(NULL)); 3559 rtc::scoped_ptr<SessionDescriptionInterface> answer(CreateAnswer(NULL));
3568 EXPECT_TRUE(answer != NULL); 3560 EXPECT_TRUE(answer != NULL);
3569 VerifyNoCryptoParams(answer->description(), true); 3561 VerifyNoCryptoParams(answer->description(), true);
3570 VerifyFingerprintStatus(answer->description(), true); 3562 VerifyFingerprintStatus(answer->description(), true);
3571 } 3563 }
3572 3564
3573 // Verifies that CreateOffer succeeds when CreateOffer is called after async 3565 // Verifies that CreateOffer succeeds when CreateOffer is called after async
3574 // identity generation is finished. 3566 // identity generation is finished.
3575 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { 3567 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) {
3576 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3568 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3577 InitWithDtls(); 3569 InitWithCertificate();
3578 3570
3579 EXPECT_TRUE_WAIT(!session_->waiting_for_identity(), 1000); 3571 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate(), 1000);
3580 3572
3581 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3573 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3582 EXPECT_TRUE(offer != NULL); 3574 EXPECT_TRUE(offer != NULL);
3583 } 3575 }
3584 3576
3585 // Verifies that CreateOffer fails when CreateOffer is called after async
3586 // identity generation fails.
3587 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnFailure) {
3588 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3589 InitWithDtls(true);
3590
3591 EXPECT_TRUE_WAIT(!session_->waiting_for_identity(), 1000);
3592
3593 rtc::scoped_ptr<SessionDescriptionInterface> offer(CreateOffer());
3594 EXPECT_TRUE(offer == NULL);
3595 }
3596
3597 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made 3577 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made
3598 // before async identity generation is finished. 3578 // before async identity generation is finished.
3599 TEST_F(WebRtcSessionTest, 3579 TEST_F(WebRtcSessionTest,
3600 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) { 3580 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) {
3601 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3581 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3602 VerifyMultipleAsyncCreateDescription( 3582 VerifyMultipleAsyncCreateDescription(
3603 true, CreateSessionDescriptionRequest::kOffer); 3583 CreateSessionDescriptionRequest::kOffer);
3604 }
3605
3606 // Verifies that CreateOffer fails when Multiple CreateOffer calls are made
3607 // before async identity generation fails.
3608 TEST_F(WebRtcSessionTest,
3609 TestMultipleCreateOfferBeforeIdentityRequestReturnFailure) {
3610 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3611 VerifyMultipleAsyncCreateDescription(
3612 false, CreateSessionDescriptionRequest::kOffer);
3613 } 3584 }
3614 3585
3615 // Verifies that CreateAnswer succeeds when Multiple CreateAnswer calls are made 3586 // Verifies that CreateAnswer succeeds when Multiple CreateAnswer calls are made
3616 // before async identity generation is finished. 3587 // before async identity generation is finished.
3617 TEST_F(WebRtcSessionTest, 3588 TEST_F(WebRtcSessionTest,
3618 TestMultipleCreateAnswerBeforeIdentityRequestReturnSuccess) { 3589 TestMultipleCreateAnswerBeforeIdentityRequestReturnSuccess) {
3619 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3590 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3620 VerifyMultipleAsyncCreateDescription( 3591 VerifyMultipleAsyncCreateDescription(
3621 true, CreateSessionDescriptionRequest::kAnswer); 3592 CreateSessionDescriptionRequest::kAnswer);
3622 }
3623
3624 // Verifies that CreateAnswer fails when Multiple CreateAnswer calls are made
3625 // before async identity generation fails.
3626 TEST_F(WebRtcSessionTest,
3627 TestMultipleCreateAnswerBeforeIdentityRequestReturnFailure) {
3628 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3629 VerifyMultipleAsyncCreateDescription(
3630 false, CreateSessionDescriptionRequest::kAnswer);
3631 } 3593 }
3632 3594
3633 // Verifies that setRemoteDescription fails when DTLS is disabled and the remote 3595 // Verifies that setRemoteDescription fails when DTLS is disabled and the remote
3634 // offer has no SDES crypto but only DTLS fingerprint. 3596 // offer has no SDES crypto but only DTLS fingerprint.
3635 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) { 3597 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) {
3636 // Init without DTLS. 3598 // Init without DTLS.
3637 Init(); 3599 Init();
3638 // Create a remote offer with secured transport disabled. 3600 // Create a remote offer with secured transport disabled.
3639 cricket::MediaSessionOptions options; 3601 cricket::MediaSessionOptions options;
3640 JsepSessionDescription* offer(CreateRemoteOffer( 3602 JsepSessionDescription* offer(CreateRemoteOffer(
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
3723 cricket::AudioOptions audio_options; 3685 cricket::AudioOptions audio_options;
3724 EXPECT_TRUE(voice_channel_->GetOptions(&audio_options)); 3686 EXPECT_TRUE(voice_channel_->GetOptions(&audio_options));
3725 EXPECT_TRUE( 3687 EXPECT_TRUE(
3726 audio_options.combined_audio_video_bwe.GetWithDefaultIfUnset(false)); 3688 audio_options.combined_audio_video_bwe.GetWithDefaultIfUnset(false));
3727 } 3689 }
3728 3690
3729 // Tests that we can renegotiate new media content with ICE candidates in the 3691 // Tests that we can renegotiate new media content with ICE candidates in the
3730 // new remote SDP. 3692 // new remote SDP.
3731 TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { 3693 TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) {
3732 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3694 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3733 InitWithDtls(); 3695 InitWithCertificate();
3734 SetFactoryDtlsSrtp(); 3696 SetFactoryDtlsSrtp();
3735 3697
3736 mediastream_signaling_.UseOptionsAudioOnly(); 3698 mediastream_signaling_.UseOptionsAudioOnly();
3737 SessionDescriptionInterface* offer = CreateOffer(); 3699 SessionDescriptionInterface* offer = CreateOffer();
3738 SetLocalDescriptionWithoutError(offer); 3700 SetLocalDescriptionWithoutError(offer);
3739 3701
3740 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); 3702 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer);
3741 SetRemoteDescriptionWithoutError(answer); 3703 SetRemoteDescriptionWithoutError(answer);
3742 3704
3743 cricket::MediaSessionOptions options; 3705 cricket::MediaSessionOptions options;
3744 options.recv_video = true; 3706 options.recv_video = true;
3745 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); 3707 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED);
3746 3708
3747 cricket::Candidate candidate1; 3709 cricket::Candidate candidate1;
3748 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000)); 3710 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000));
3749 candidate1.set_component(1); 3711 candidate1.set_component(1);
3750 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1, 3712 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1,
3751 candidate1); 3713 candidate1);
3752 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); 3714 EXPECT_TRUE(offer->AddCandidate(&ice_candidate));
3753 SetRemoteDescriptionWithoutError(offer); 3715 SetRemoteDescriptionWithoutError(offer);
3754 3716
3755 answer = CreateAnswer(NULL); 3717 answer = CreateAnswer(NULL);
3756 SetLocalDescriptionWithoutError(answer); 3718 SetLocalDescriptionWithoutError(answer);
3757 } 3719 }
3758 3720
3759 // Tests that we can renegotiate new media content with ICE candidates separated 3721 // Tests that we can renegotiate new media content with ICE candidates separated
3760 // from the remote SDP. 3722 // from the remote SDP.
3761 TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) { 3723 TEST_F(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) {
3762 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); 3724 MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp);
3763 InitWithDtls(); 3725 InitWithCertificate();
3764 SetFactoryDtlsSrtp(); 3726 SetFactoryDtlsSrtp();
3765 3727
3766 mediastream_signaling_.UseOptionsAudioOnly(); 3728 mediastream_signaling_.UseOptionsAudioOnly();
3767 SessionDescriptionInterface* offer = CreateOffer(); 3729 SessionDescriptionInterface* offer = CreateOffer();
3768 SetLocalDescriptionWithoutError(offer); 3730 SetLocalDescriptionWithoutError(offer);
3769 3731
3770 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); 3732 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer);
3771 SetRemoteDescriptionWithoutError(answer); 3733 SetRemoteDescriptionWithoutError(answer);
3772 3734
3773 cricket::MediaSessionOptions options; 3735 cricket::MediaSessionOptions options;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
3884 // terminated. The offer creation may or may not have succeeded, but we 3846 // terminated. The offer creation may or may not have succeeded, but we
3885 // must have received a notification which, so the only invalid state 3847 // must have received a notification which, so the only invalid state
3886 // is kInit. 3848 // is kInit.
3887 EXPECT_NE(WebRtcSessionCreateSDPObserverForTest::kInit, o->state()); 3849 EXPECT_NE(WebRtcSessionCreateSDPObserverForTest::kInit, o->state());
3888 } 3850 }
3889 } 3851 }
3890 3852
3891 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test 3853 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test
3892 // currently fails because upon disconnection and reconnection OnIceComplete is 3854 // currently fails because upon disconnection and reconnection OnIceComplete is
3893 // called more than once without returning to IceGatheringGathering. 3855 // called more than once without returning to IceGatheringGathering.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698