| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 protected: | 339 protected: |
| 340 ~WebRtcSessionCreateSDPObserverForTest() {} | 340 ~WebRtcSessionCreateSDPObserverForTest() {} |
| 341 | 341 |
| 342 private: | 342 private: |
| 343 std::unique_ptr<SessionDescriptionInterface> description_; | 343 std::unique_ptr<SessionDescriptionInterface> description_; |
| 344 State state_; | 344 State state_; |
| 345 }; | 345 }; |
| 346 | 346 |
| 347 class FakeAudioSource : public cricket::AudioSource { | 347 class FakeAudioSource : public cricket::AudioSource { |
| 348 public: | 348 public: |
| 349 FakeAudioSource() : sink_(NULL) {} | 349 FakeAudioSource() : sink_(nullptr) {} |
| 350 virtual ~FakeAudioSource() { | 350 virtual ~FakeAudioSource() { |
| 351 if (sink_) | 351 if (sink_) |
| 352 sink_->OnClose(); | 352 sink_->OnClose(); |
| 353 } | 353 } |
| 354 | 354 |
| 355 void SetSink(Sink* sink) override { sink_ = sink; } | 355 void SetSink(Sink* sink) override { sink_ = sink; } |
| 356 | 356 |
| 357 const cricket::AudioSource::Sink* sink() const { return sink_; } | 357 const cricket::AudioSource::Sink* sink() const { return sink_; } |
| 358 | 358 |
| 359 private: | 359 private: |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 network_manager_.RemoveInterface(addr); | 412 network_manager_.RemoveInterface(addr); |
| 413 } | 413 } |
| 414 | 414 |
| 415 // If |cert_generator| != null or |rtc_configuration| contains |certificates| | 415 // If |cert_generator| != null or |rtc_configuration| contains |certificates| |
| 416 // then DTLS will be enabled unless explicitly disabled by |rtc_configuration| | 416 // then DTLS will be enabled unless explicitly disabled by |rtc_configuration| |
| 417 // options. When DTLS is enabled a certificate will be used if provided, | 417 // options. When DTLS is enabled a certificate will be used if provided, |
| 418 // otherwise one will be generated using the |cert_generator|. | 418 // otherwise one will be generated using the |cert_generator|. |
| 419 void Init( | 419 void Init( |
| 420 std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator, | 420 std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator, |
| 421 PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) { | 421 PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) { |
| 422 ASSERT_TRUE(session_.get() == NULL); | 422 ASSERT_TRUE(session_.get() == nullptr); |
| 423 fake_sctp_transport_factory_ = new FakeSctpTransportFactory(); | 423 fake_sctp_transport_factory_ = new FakeSctpTransportFactory(); |
| 424 session_.reset(new WebRtcSessionForTest( | 424 session_.reset(new WebRtcSessionForTest( |
| 425 media_controller_.get(), rtc::Thread::Current(), rtc::Thread::Current(), | 425 media_controller_.get(), rtc::Thread::Current(), rtc::Thread::Current(), |
| 426 rtc::Thread::Current(), allocator_.get(), &observer_, | 426 rtc::Thread::Current(), allocator_.get(), &observer_, |
| 427 std::unique_ptr<cricket::TransportController>( | 427 std::unique_ptr<cricket::TransportController>( |
| 428 new cricket::TransportController(rtc::Thread::Current(), | 428 new cricket::TransportController(rtc::Thread::Current(), |
| 429 rtc::Thread::Current(), | 429 rtc::Thread::Current(), |
| 430 allocator_.get())), | 430 allocator_.get())), |
| 431 std::unique_ptr<FakeSctpTransportFactory>( | 431 std::unique_ptr<FakeSctpTransportFactory>( |
| 432 fake_sctp_transport_factory_))); | 432 fake_sctp_transport_factory_))); |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 } | 670 } |
| 671 | 671 |
| 672 SessionDescriptionInterface* CreateAnswer() { | 672 SessionDescriptionInterface* CreateAnswer() { |
| 673 cricket::MediaSessionOptions options; | 673 cricket::MediaSessionOptions options; |
| 674 options.recv_video = true; | 674 options.recv_video = true; |
| 675 options.recv_audio = true; | 675 options.recv_audio = true; |
| 676 return CreateAnswer(options); | 676 return CreateAnswer(options); |
| 677 } | 677 } |
| 678 | 678 |
| 679 bool ChannelsExist() const { | 679 bool ChannelsExist() const { |
| 680 return (session_->voice_channel() != NULL && | 680 return (session_->voice_channel() != nullptr && |
| 681 session_->video_channel() != NULL); | 681 session_->video_channel() != nullptr); |
| 682 } | 682 } |
| 683 | 683 |
| 684 void VerifyCryptoParams(const cricket::SessionDescription* sdp, | 684 void VerifyCryptoParams(const cricket::SessionDescription* sdp, |
| 685 bool gcm_enabled = false) { | 685 bool gcm_enabled = false) { |
| 686 ASSERT_TRUE(session_.get() != NULL); | 686 ASSERT_TRUE(session_.get() != nullptr); |
| 687 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); | 687 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); |
| 688 ASSERT_TRUE(content != NULL); | 688 ASSERT_TRUE(content != nullptr); |
| 689 const cricket::AudioContentDescription* audio_content = | 689 const cricket::AudioContentDescription* audio_content = |
| 690 static_cast<const cricket::AudioContentDescription*>( | 690 static_cast<const cricket::AudioContentDescription*>( |
| 691 content->description); | 691 content->description); |
| 692 ASSERT_TRUE(audio_content != NULL); | 692 ASSERT_TRUE(audio_content != nullptr); |
| 693 if (!gcm_enabled) { | 693 if (!gcm_enabled) { |
| 694 ASSERT_EQ(1U, audio_content->cryptos().size()); | 694 ASSERT_EQ(1U, audio_content->cryptos().size()); |
| 695 ASSERT_EQ(47U, audio_content->cryptos()[0].key_params.size()); | 695 ASSERT_EQ(47U, audio_content->cryptos()[0].key_params.size()); |
| 696 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80", | 696 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80", |
| 697 audio_content->cryptos()[0].cipher_suite); | 697 audio_content->cryptos()[0].cipher_suite); |
| 698 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), | 698 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), |
| 699 audio_content->protocol()); | 699 audio_content->protocol()); |
| 700 } else { | 700 } else { |
| 701 // The offer contains 3 possible crypto suites, the answer 1. | 701 // The offer contains 3 possible crypto suites, the answer 1. |
| 702 EXPECT_LE(1U, audio_content->cryptos().size()); | 702 EXPECT_LE(1U, audio_content->cryptos().size()); |
| 703 EXPECT_NE(2U, audio_content->cryptos().size()); | 703 EXPECT_NE(2U, audio_content->cryptos().size()); |
| 704 EXPECT_GE(3U, audio_content->cryptos().size()); | 704 EXPECT_GE(3U, audio_content->cryptos().size()); |
| 705 ASSERT_EQ(67U, audio_content->cryptos()[0].key_params.size()); | 705 ASSERT_EQ(67U, audio_content->cryptos()[0].key_params.size()); |
| 706 ASSERT_EQ("AEAD_AES_256_GCM", | 706 ASSERT_EQ("AEAD_AES_256_GCM", |
| 707 audio_content->cryptos()[0].cipher_suite); | 707 audio_content->cryptos()[0].cipher_suite); |
| 708 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), | 708 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), |
| 709 audio_content->protocol()); | 709 audio_content->protocol()); |
| 710 } | 710 } |
| 711 | 711 |
| 712 content = cricket::GetFirstVideoContent(sdp); | 712 content = cricket::GetFirstVideoContent(sdp); |
| 713 ASSERT_TRUE(content != NULL); | 713 ASSERT_TRUE(content != nullptr); |
| 714 const cricket::VideoContentDescription* video_content = | 714 const cricket::VideoContentDescription* video_content = |
| 715 static_cast<const cricket::VideoContentDescription*>( | 715 static_cast<const cricket::VideoContentDescription*>( |
| 716 content->description); | 716 content->description); |
| 717 ASSERT_TRUE(video_content != NULL); | 717 ASSERT_TRUE(video_content != nullptr); |
| 718 if (!gcm_enabled) { | 718 if (!gcm_enabled) { |
| 719 ASSERT_EQ(1U, video_content->cryptos().size()); | 719 ASSERT_EQ(1U, video_content->cryptos().size()); |
| 720 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80", | 720 ASSERT_EQ("AES_CM_128_HMAC_SHA1_80", |
| 721 video_content->cryptos()[0].cipher_suite); | 721 video_content->cryptos()[0].cipher_suite); |
| 722 ASSERT_EQ(47U, video_content->cryptos()[0].key_params.size()); | 722 ASSERT_EQ(47U, video_content->cryptos()[0].key_params.size()); |
| 723 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), | 723 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), |
| 724 video_content->protocol()); | 724 video_content->protocol()); |
| 725 } else { | 725 } else { |
| 726 // The offer contains 3 possible crypto suites, the answer 1. | 726 // The offer contains 3 possible crypto suites, the answer 1. |
| 727 EXPECT_LE(1U, video_content->cryptos().size()); | 727 EXPECT_LE(1U, video_content->cryptos().size()); |
| 728 EXPECT_NE(2U, video_content->cryptos().size()); | 728 EXPECT_NE(2U, video_content->cryptos().size()); |
| 729 EXPECT_GE(3U, video_content->cryptos().size()); | 729 EXPECT_GE(3U, video_content->cryptos().size()); |
| 730 ASSERT_EQ("AEAD_AES_256_GCM", | 730 ASSERT_EQ("AEAD_AES_256_GCM", |
| 731 video_content->cryptos()[0].cipher_suite); | 731 video_content->cryptos()[0].cipher_suite); |
| 732 ASSERT_EQ(67U, video_content->cryptos()[0].key_params.size()); | 732 ASSERT_EQ(67U, video_content->cryptos()[0].key_params.size()); |
| 733 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), | 733 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), |
| 734 video_content->protocol()); | 734 video_content->protocol()); |
| 735 } | 735 } |
| 736 } | 736 } |
| 737 | 737 |
| 738 void VerifyNoCryptoParams(const cricket::SessionDescription* sdp, bool dtls) { | 738 void VerifyNoCryptoParams(const cricket::SessionDescription* sdp, bool dtls) { |
| 739 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); | 739 const cricket::ContentInfo* content = cricket::GetFirstAudioContent(sdp); |
| 740 ASSERT_TRUE(content != NULL); | 740 ASSERT_TRUE(content != nullptr); |
| 741 const cricket::AudioContentDescription* audio_content = | 741 const cricket::AudioContentDescription* audio_content = |
| 742 static_cast<const cricket::AudioContentDescription*>( | 742 static_cast<const cricket::AudioContentDescription*>( |
| 743 content->description); | 743 content->description); |
| 744 ASSERT_TRUE(audio_content != NULL); | 744 ASSERT_TRUE(audio_content != nullptr); |
| 745 ASSERT_EQ(0U, audio_content->cryptos().size()); | 745 ASSERT_EQ(0U, audio_content->cryptos().size()); |
| 746 | 746 |
| 747 content = cricket::GetFirstVideoContent(sdp); | 747 content = cricket::GetFirstVideoContent(sdp); |
| 748 ASSERT_TRUE(content != NULL); | 748 ASSERT_TRUE(content != nullptr); |
| 749 const cricket::VideoContentDescription* video_content = | 749 const cricket::VideoContentDescription* video_content = |
| 750 static_cast<const cricket::VideoContentDescription*>( | 750 static_cast<const cricket::VideoContentDescription*>( |
| 751 content->description); | 751 content->description); |
| 752 ASSERT_TRUE(video_content != NULL); | 752 ASSERT_TRUE(video_content != nullptr); |
| 753 ASSERT_EQ(0U, video_content->cryptos().size()); | 753 ASSERT_EQ(0U, video_content->cryptos().size()); |
| 754 | 754 |
| 755 if (dtls) { | 755 if (dtls) { |
| 756 EXPECT_EQ(std::string(cricket::kMediaProtocolDtlsSavpf), | 756 EXPECT_EQ(std::string(cricket::kMediaProtocolDtlsSavpf), |
| 757 audio_content->protocol()); | 757 audio_content->protocol()); |
| 758 EXPECT_EQ(std::string(cricket::kMediaProtocolDtlsSavpf), | 758 EXPECT_EQ(std::string(cricket::kMediaProtocolDtlsSavpf), |
| 759 video_content->protocol()); | 759 video_content->protocol()); |
| 760 } else { | 760 } else { |
| 761 EXPECT_EQ(std::string(cricket::kMediaProtocolAvpf), | 761 EXPECT_EQ(std::string(cricket::kMediaProtocolAvpf), |
| 762 audio_content->protocol()); | 762 audio_content->protocol()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 773 // Confirmed to work with KT_RSA and KT_ECDSA. | 773 // Confirmed to work with KT_RSA and KT_ECDSA. |
| 774 tdesc_factory_->set_certificate( | 774 tdesc_factory_->set_certificate( |
| 775 rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>( | 775 rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>( |
| 776 rtc::SSLIdentity::Generate(identity_name, rtc::KT_DEFAULT)))); | 776 rtc::SSLIdentity::Generate(identity_name, rtc::KT_DEFAULT)))); |
| 777 tdesc_factory_->set_secure(cricket::SEC_REQUIRED); | 777 tdesc_factory_->set_secure(cricket::SEC_REQUIRED); |
| 778 } | 778 } |
| 779 | 779 |
| 780 void VerifyFingerprintStatus(const cricket::SessionDescription* sdp, | 780 void VerifyFingerprintStatus(const cricket::SessionDescription* sdp, |
| 781 bool expected) { | 781 bool expected) { |
| 782 const TransportInfo* audio = sdp->GetTransportInfoByName("audio"); | 782 const TransportInfo* audio = sdp->GetTransportInfoByName("audio"); |
| 783 ASSERT_TRUE(audio != NULL); | 783 ASSERT_TRUE(audio != nullptr); |
| 784 ASSERT_EQ(expected, audio->description.identity_fingerprint.get() != NULL); | 784 ASSERT_EQ(expected, |
| 785 audio->description.identity_fingerprint.get() != nullptr); |
| 785 const TransportInfo* video = sdp->GetTransportInfoByName("video"); | 786 const TransportInfo* video = sdp->GetTransportInfoByName("video"); |
| 786 ASSERT_TRUE(video != NULL); | 787 ASSERT_TRUE(video != nullptr); |
| 787 ASSERT_EQ(expected, video->description.identity_fingerprint.get() != NULL); | 788 ASSERT_EQ(expected, |
| 789 video->description.identity_fingerprint.get() != nullptr); |
| 788 } | 790 } |
| 789 | 791 |
| 790 void VerifyAnswerFromNonCryptoOffer() { | 792 void VerifyAnswerFromNonCryptoOffer() { |
| 791 // Create an SDP without Crypto. | 793 // Create an SDP without Crypto. |
| 792 cricket::MediaSessionOptions options; | 794 cricket::MediaSessionOptions options; |
| 793 options.recv_video = true; | 795 options.recv_video = true; |
| 794 JsepSessionDescription* offer( | 796 JsepSessionDescription* offer( |
| 795 CreateRemoteOffer(options, cricket::SEC_DISABLED)); | 797 CreateRemoteOffer(options, cricket::SEC_DISABLED)); |
| 796 ASSERT_TRUE(offer != NULL); | 798 ASSERT_TRUE(offer != nullptr); |
| 797 VerifyNoCryptoParams(offer->description(), false); | 799 VerifyNoCryptoParams(offer->description(), false); |
| 798 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, | 800 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, |
| 799 offer); | 801 offer); |
| 800 const webrtc::SessionDescriptionInterface* answer = CreateAnswer(); | 802 const webrtc::SessionDescriptionInterface* answer = CreateAnswer(); |
| 801 // Answer should be NULL as no crypto params in offer. | 803 // Answer should be null as no crypto params in offer. |
| 802 ASSERT_TRUE(answer == NULL); | 804 ASSERT_TRUE(answer == nullptr); |
| 803 } | 805 } |
| 804 | 806 |
| 805 void VerifyAnswerFromCryptoOffer() { | 807 void VerifyAnswerFromCryptoOffer() { |
| 806 cricket::MediaSessionOptions options; | 808 cricket::MediaSessionOptions options; |
| 807 options.recv_video = true; | 809 options.recv_video = true; |
| 808 options.bundle_enabled = true; | 810 options.bundle_enabled = true; |
| 809 std::unique_ptr<JsepSessionDescription> offer( | 811 std::unique_ptr<JsepSessionDescription> offer( |
| 810 CreateRemoteOffer(options, cricket::SEC_REQUIRED)); | 812 CreateRemoteOffer(options, cricket::SEC_REQUIRED)); |
| 811 ASSERT_TRUE(offer.get() != NULL); | 813 ASSERT_TRUE(offer.get() != nullptr); |
| 812 VerifyCryptoParams(offer->description()); | 814 VerifyCryptoParams(offer->description()); |
| 813 SetRemoteDescriptionWithoutError(offer.release()); | 815 SetRemoteDescriptionWithoutError(offer.release()); |
| 814 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 816 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 815 ASSERT_TRUE(answer.get() != NULL); | 817 ASSERT_TRUE(answer.get() != nullptr); |
| 816 VerifyCryptoParams(answer->description()); | 818 VerifyCryptoParams(answer->description()); |
| 817 } | 819 } |
| 818 | 820 |
| 819 bool IceUfragPwdEqual(const cricket::SessionDescription* desc1, | 821 bool IceUfragPwdEqual(const cricket::SessionDescription* desc1, |
| 820 const cricket::SessionDescription* desc2) { | 822 const cricket::SessionDescription* desc2) { |
| 821 if (desc1->contents().size() != desc2->contents().size()) { | 823 if (desc1->contents().size() != desc2->contents().size()) { |
| 822 return false; | 824 return false; |
| 823 } | 825 } |
| 824 | 826 |
| 825 const cricket::ContentInfos& contents = desc1->contents(); | 827 const cricket::ContentInfos& contents = desc1->contents(); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 920 // creates a local answer and applies is as a local description. | 922 // creates a local answer and applies is as a local description. |
| 921 // Call SendAudioVideoStreamX() before this function | 923 // Call SendAudioVideoStreamX() before this function |
| 922 // to decide which local and remote streams to create. | 924 // to decide which local and remote streams to create. |
| 923 void CreateAndSetRemoteOfferAndLocalAnswer() { | 925 void CreateAndSetRemoteOfferAndLocalAnswer() { |
| 924 SessionDescriptionInterface* offer = CreateRemoteOffer(); | 926 SessionDescriptionInterface* offer = CreateRemoteOffer(); |
| 925 SetRemoteDescriptionWithoutError(offer); | 927 SetRemoteDescriptionWithoutError(offer); |
| 926 SessionDescriptionInterface* answer = CreateAnswer(); | 928 SessionDescriptionInterface* answer = CreateAnswer(); |
| 927 SetLocalDescriptionWithoutError(answer); | 929 SetLocalDescriptionWithoutError(answer); |
| 928 } | 930 } |
| 929 void SetLocalDescriptionWithoutError(SessionDescriptionInterface* desc) { | 931 void SetLocalDescriptionWithoutError(SessionDescriptionInterface* desc) { |
| 930 EXPECT_TRUE(session_->SetLocalDescription(desc, NULL)); | 932 EXPECT_TRUE(session_->SetLocalDescription(desc, nullptr)); |
| 931 session_->MaybeStartGathering(); | 933 session_->MaybeStartGathering(); |
| 932 } | 934 } |
| 933 void SetLocalDescriptionExpectState(SessionDescriptionInterface* desc, | 935 void SetLocalDescriptionExpectState(SessionDescriptionInterface* desc, |
| 934 WebRtcSession::State expected_state) { | 936 WebRtcSession::State expected_state) { |
| 935 SetLocalDescriptionWithoutError(desc); | 937 SetLocalDescriptionWithoutError(desc); |
| 936 EXPECT_EQ(expected_state, session_->state()); | 938 EXPECT_EQ(expected_state, session_->state()); |
| 937 } | 939 } |
| 938 void SetLocalDescriptionExpectError(const std::string& action, | 940 void SetLocalDescriptionExpectError(const std::string& action, |
| 939 const std::string& expected_error, | 941 const std::string& expected_error, |
| 940 SessionDescriptionInterface* desc) { | 942 SessionDescriptionInterface* desc) { |
| 941 std::string error; | 943 std::string error; |
| 942 EXPECT_FALSE(session_->SetLocalDescription(desc, &error)); | 944 EXPECT_FALSE(session_->SetLocalDescription(desc, &error)); |
| 943 std::string sdp_type = "local "; | 945 std::string sdp_type = "local "; |
| 944 sdp_type.append(action); | 946 sdp_type.append(action); |
| 945 EXPECT_NE(std::string::npos, error.find(sdp_type)); | 947 EXPECT_NE(std::string::npos, error.find(sdp_type)); |
| 946 EXPECT_NE(std::string::npos, error.find(expected_error)); | 948 EXPECT_NE(std::string::npos, error.find(expected_error)); |
| 947 } | 949 } |
| 948 void SetLocalDescriptionOfferExpectError(const std::string& expected_error, | 950 void SetLocalDescriptionOfferExpectError(const std::string& expected_error, |
| 949 SessionDescriptionInterface* desc) { | 951 SessionDescriptionInterface* desc) { |
| 950 SetLocalDescriptionExpectError(SessionDescriptionInterface::kOffer, | 952 SetLocalDescriptionExpectError(SessionDescriptionInterface::kOffer, |
| 951 expected_error, desc); | 953 expected_error, desc); |
| 952 } | 954 } |
| 953 void SetLocalDescriptionAnswerExpectError(const std::string& expected_error, | 955 void SetLocalDescriptionAnswerExpectError(const std::string& expected_error, |
| 954 SessionDescriptionInterface* desc) { | 956 SessionDescriptionInterface* desc) { |
| 955 SetLocalDescriptionExpectError(SessionDescriptionInterface::kAnswer, | 957 SetLocalDescriptionExpectError(SessionDescriptionInterface::kAnswer, |
| 956 expected_error, desc); | 958 expected_error, desc); |
| 957 } | 959 } |
| 958 void SetRemoteDescriptionWithoutError(SessionDescriptionInterface* desc) { | 960 void SetRemoteDescriptionWithoutError(SessionDescriptionInterface* desc) { |
| 959 EXPECT_TRUE(session_->SetRemoteDescription(desc, NULL)); | 961 EXPECT_TRUE(session_->SetRemoteDescription(desc, nullptr)); |
| 960 } | 962 } |
| 961 void SetRemoteDescriptionExpectState(SessionDescriptionInterface* desc, | 963 void SetRemoteDescriptionExpectState(SessionDescriptionInterface* desc, |
| 962 WebRtcSession::State expected_state) { | 964 WebRtcSession::State expected_state) { |
| 963 SetRemoteDescriptionWithoutError(desc); | 965 SetRemoteDescriptionWithoutError(desc); |
| 964 EXPECT_EQ(expected_state, session_->state()); | 966 EXPECT_EQ(expected_state, session_->state()); |
| 965 } | 967 } |
| 966 void SetRemoteDescriptionExpectError(const std::string& action, | 968 void SetRemoteDescriptionExpectError(const std::string& action, |
| 967 const std::string& expected_error, | 969 const std::string& expected_error, |
| 968 SessionDescriptionInterface* desc) { | 970 SessionDescriptionInterface* desc) { |
| 969 std::string error; | 971 std::string error; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 989 expected_error, desc); | 991 expected_error, desc); |
| 990 } | 992 } |
| 991 | 993 |
| 992 void CreateCryptoOfferAndNonCryptoAnswer(SessionDescriptionInterface** offer, | 994 void CreateCryptoOfferAndNonCryptoAnswer(SessionDescriptionInterface** offer, |
| 993 SessionDescriptionInterface** nocrypto_answer) { | 995 SessionDescriptionInterface** nocrypto_answer) { |
| 994 // Create a SDP without Crypto. | 996 // Create a SDP without Crypto. |
| 995 cricket::MediaSessionOptions options; | 997 cricket::MediaSessionOptions options; |
| 996 options.recv_video = true; | 998 options.recv_video = true; |
| 997 options.bundle_enabled = true; | 999 options.bundle_enabled = true; |
| 998 *offer = CreateRemoteOffer(options, cricket::SEC_ENABLED); | 1000 *offer = CreateRemoteOffer(options, cricket::SEC_ENABLED); |
| 999 ASSERT_TRUE(*offer != NULL); | 1001 ASSERT_TRUE(*offer != nullptr); |
| 1000 VerifyCryptoParams((*offer)->description()); | 1002 VerifyCryptoParams((*offer)->description()); |
| 1001 | 1003 |
| 1002 *nocrypto_answer = CreateRemoteAnswer(*offer, options, | 1004 *nocrypto_answer = CreateRemoteAnswer(*offer, options, |
| 1003 cricket::SEC_DISABLED); | 1005 cricket::SEC_DISABLED); |
| 1004 EXPECT_TRUE(*nocrypto_answer != NULL); | 1006 EXPECT_TRUE(*nocrypto_answer != nullptr); |
| 1005 } | 1007 } |
| 1006 | 1008 |
| 1007 void CreateDtlsOfferAndNonDtlsAnswer(SessionDescriptionInterface** offer, | 1009 void CreateDtlsOfferAndNonDtlsAnswer(SessionDescriptionInterface** offer, |
| 1008 SessionDescriptionInterface** nodtls_answer) { | 1010 SessionDescriptionInterface** nodtls_answer) { |
| 1009 cricket::MediaSessionOptions options; | 1011 cricket::MediaSessionOptions options; |
| 1010 options.recv_video = true; | 1012 options.recv_video = true; |
| 1011 options.bundle_enabled = true; | 1013 options.bundle_enabled = true; |
| 1012 | 1014 |
| 1013 std::unique_ptr<SessionDescriptionInterface> temp_offer( | 1015 std::unique_ptr<SessionDescriptionInterface> temp_offer( |
| 1014 CreateRemoteOffer(options, cricket::SEC_ENABLED)); | 1016 CreateRemoteOffer(options, cricket::SEC_ENABLED)); |
| 1015 | 1017 |
| 1016 *nodtls_answer = | 1018 *nodtls_answer = |
| 1017 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED); | 1019 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED); |
| 1018 EXPECT_TRUE(*nodtls_answer != NULL); | 1020 EXPECT_TRUE(*nodtls_answer != nullptr); |
| 1019 VerifyFingerprintStatus((*nodtls_answer)->description(), false); | 1021 VerifyFingerprintStatus((*nodtls_answer)->description(), false); |
| 1020 VerifyCryptoParams((*nodtls_answer)->description()); | 1022 VerifyCryptoParams((*nodtls_answer)->description()); |
| 1021 | 1023 |
| 1022 SetFactoryDtlsSrtp(); | 1024 SetFactoryDtlsSrtp(); |
| 1023 *offer = CreateRemoteOffer(options, cricket::SEC_ENABLED); | 1025 *offer = CreateRemoteOffer(options, cricket::SEC_ENABLED); |
| 1024 ASSERT_TRUE(*offer != NULL); | 1026 ASSERT_TRUE(*offer != nullptr); |
| 1025 VerifyFingerprintStatus((*offer)->description(), true); | 1027 VerifyFingerprintStatus((*offer)->description(), true); |
| 1026 VerifyCryptoParams((*offer)->description()); | 1028 VerifyCryptoParams((*offer)->description()); |
| 1027 } | 1029 } |
| 1028 | 1030 |
| 1029 JsepSessionDescription* CreateRemoteOfferWithVersion( | 1031 JsepSessionDescription* CreateRemoteOfferWithVersion( |
| 1030 cricket::MediaSessionOptions options, | 1032 cricket::MediaSessionOptions options, |
| 1031 cricket::SecurePolicy secure_policy, | 1033 cricket::SecurePolicy secure_policy, |
| 1032 const std::string& session_version, | 1034 const std::string& session_version, |
| 1033 const SessionDescriptionInterface* current_desc) { | 1035 const SessionDescriptionInterface* current_desc) { |
| 1034 std::string session_id = rtc::ToString(rtc::CreateRandomId64()); | 1036 std::string session_id = rtc::ToString(rtc::CreateRandomId64()); |
| 1035 const cricket::SessionDescription* cricket_desc = NULL; | 1037 const cricket::SessionDescription* cricket_desc = nullptr; |
| 1036 if (current_desc) { | 1038 if (current_desc) { |
| 1037 cricket_desc = current_desc->description(); | 1039 cricket_desc = current_desc->description(); |
| 1038 session_id = current_desc->session_id(); | 1040 session_id = current_desc->session_id(); |
| 1039 } | 1041 } |
| 1040 | 1042 |
| 1041 desc_factory_->set_secure(secure_policy); | 1043 desc_factory_->set_secure(secure_policy); |
| 1042 JsepSessionDescription* offer( | 1044 JsepSessionDescription* offer( |
| 1043 new JsepSessionDescription(JsepSessionDescription::kOffer)); | 1045 new JsepSessionDescription(JsepSessionDescription::kOffer)); |
| 1044 if (!offer->Initialize(desc_factory_->CreateOffer(options, cricket_desc), | 1046 if (!offer->Initialize(desc_factory_->CreateOffer(options, cricket_desc), |
| 1045 session_id, session_version)) { | 1047 session_id, session_version)) { |
| 1046 delete offer; | 1048 delete offer; |
| 1047 offer = NULL; | 1049 offer = nullptr; |
| 1048 } | 1050 } |
| 1049 return offer; | 1051 return offer; |
| 1050 } | 1052 } |
| 1051 JsepSessionDescription* CreateRemoteOffer( | 1053 JsepSessionDescription* CreateRemoteOffer( |
| 1052 cricket::MediaSessionOptions options) { | 1054 cricket::MediaSessionOptions options) { |
| 1053 return CreateRemoteOfferWithVersion(options, cricket::SEC_ENABLED, | 1055 return CreateRemoteOfferWithVersion(options, cricket::SEC_ENABLED, |
| 1054 kSessionVersion, NULL); | 1056 kSessionVersion, nullptr); |
| 1055 } | 1057 } |
| 1056 JsepSessionDescription* CreateRemoteOffer( | 1058 JsepSessionDescription* CreateRemoteOffer( |
| 1057 cricket::MediaSessionOptions options, cricket::SecurePolicy sdes_policy) { | 1059 cricket::MediaSessionOptions options, cricket::SecurePolicy sdes_policy) { |
| 1058 return CreateRemoteOfferWithVersion( | 1060 return CreateRemoteOfferWithVersion(options, sdes_policy, kSessionVersion, |
| 1059 options, sdes_policy, kSessionVersion, NULL); | 1061 nullptr); |
| 1060 } | 1062 } |
| 1061 JsepSessionDescription* CreateRemoteOffer( | 1063 JsepSessionDescription* CreateRemoteOffer( |
| 1062 cricket::MediaSessionOptions options, | 1064 cricket::MediaSessionOptions options, |
| 1063 const SessionDescriptionInterface* current_desc) { | 1065 const SessionDescriptionInterface* current_desc) { |
| 1064 return CreateRemoteOfferWithVersion(options, cricket::SEC_ENABLED, | 1066 return CreateRemoteOfferWithVersion(options, cricket::SEC_ENABLED, |
| 1065 kSessionVersion, current_desc); | 1067 kSessionVersion, current_desc); |
| 1066 } | 1068 } |
| 1067 | 1069 |
| 1068 JsepSessionDescription* CreateRemoteOfferWithSctpPort( | 1070 JsepSessionDescription* CreateRemoteOfferWithSctpPort( |
| 1069 const char* sctp_stream_name, int new_port, | 1071 const char* sctp_stream_name, int new_port, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1083 char new_port_str[16]; | 1085 char new_port_str[16]; |
| 1084 rtc::sprintfn(new_port_str, sizeof(new_port_str), "%d", new_port); | 1086 rtc::sprintfn(new_port_str, sizeof(new_port_str), "%d", new_port); |
| 1085 std::string offer_str; | 1087 std::string offer_str; |
| 1086 offer_basis->ToString(&offer_str); | 1088 offer_basis->ToString(&offer_str); |
| 1087 rtc::replace_substrs(default_port_str, strlen(default_port_str), | 1089 rtc::replace_substrs(default_port_str, strlen(default_port_str), |
| 1088 new_port_str, strlen(new_port_str), | 1090 new_port_str, strlen(new_port_str), |
| 1089 &offer_str); | 1091 &offer_str); |
| 1090 JsepSessionDescription* offer = new JsepSessionDescription( | 1092 JsepSessionDescription* offer = new JsepSessionDescription( |
| 1091 offer_basis->type()); | 1093 offer_basis->type()); |
| 1092 delete offer_basis; | 1094 delete offer_basis; |
| 1093 offer->Initialize(offer_str, NULL); | 1095 offer->Initialize(offer_str, nullptr); |
| 1094 return offer; | 1096 return offer; |
| 1095 } | 1097 } |
| 1096 | 1098 |
| 1097 // Create a remote offer. Call SendAudioVideoStreamX() | 1099 // Create a remote offer. Call SendAudioVideoStreamX() |
| 1098 // before this function to decide which streams to create. | 1100 // before this function to decide which streams to create. |
| 1099 JsepSessionDescription* CreateRemoteOffer() { | 1101 JsepSessionDescription* CreateRemoteOffer() { |
| 1100 cricket::MediaSessionOptions options; | 1102 cricket::MediaSessionOptions options; |
| 1101 GetOptionsForAnswer(&options); | 1103 GetOptionsForAnswer(&options); |
| 1102 return CreateRemoteOffer(options, session_->remote_description()); | 1104 return CreateRemoteOffer(options, session_->remote_description()); |
| 1103 } | 1105 } |
| 1104 | 1106 |
| 1105 JsepSessionDescription* CreateRemoteAnswer( | 1107 JsepSessionDescription* CreateRemoteAnswer( |
| 1106 const SessionDescriptionInterface* offer, | 1108 const SessionDescriptionInterface* offer, |
| 1107 cricket::MediaSessionOptions options, | 1109 cricket::MediaSessionOptions options, |
| 1108 cricket::SecurePolicy policy) { | 1110 cricket::SecurePolicy policy) { |
| 1109 desc_factory_->set_secure(policy); | 1111 desc_factory_->set_secure(policy); |
| 1110 const std::string session_id = | 1112 const std::string session_id = |
| 1111 rtc::ToString(rtc::CreateRandomId64()); | 1113 rtc::ToString(rtc::CreateRandomId64()); |
| 1112 JsepSessionDescription* answer( | 1114 JsepSessionDescription* answer( |
| 1113 new JsepSessionDescription(JsepSessionDescription::kAnswer)); | 1115 new JsepSessionDescription(JsepSessionDescription::kAnswer)); |
| 1114 if (!answer->Initialize(desc_factory_->CreateAnswer(offer->description(), | 1116 if (!answer->Initialize( |
| 1115 options, NULL), | 1117 desc_factory_->CreateAnswer(offer->description(), options, nullptr), |
| 1116 session_id, kSessionVersion)) { | 1118 session_id, kSessionVersion)) { |
| 1117 delete answer; | 1119 delete answer; |
| 1118 answer = NULL; | 1120 answer = nullptr; |
| 1119 } | 1121 } |
| 1120 return answer; | 1122 return answer; |
| 1121 } | 1123 } |
| 1122 | 1124 |
| 1123 JsepSessionDescription* CreateRemoteAnswer( | 1125 JsepSessionDescription* CreateRemoteAnswer( |
| 1124 const SessionDescriptionInterface* offer, | 1126 const SessionDescriptionInterface* offer, |
| 1125 cricket::MediaSessionOptions options) { | 1127 cricket::MediaSessionOptions options) { |
| 1126 return CreateRemoteAnswer(offer, options, cricket::SEC_REQUIRED); | 1128 return CreateRemoteAnswer(offer, options, cricket::SEC_REQUIRED); |
| 1127 } | 1129 } |
| 1128 | 1130 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1160 // for rtp and rtcp. | 1162 // for rtp and rtcp. |
| 1161 expected_candidate_num = 4; | 1163 expected_candidate_num = 4; |
| 1162 // Disable rtcp-mux from the answer | 1164 // Disable rtcp-mux from the answer |
| 1163 const std::string kRtcpMux = "a=rtcp-mux"; | 1165 const std::string kRtcpMux = "a=rtcp-mux"; |
| 1164 const std::string kXRtcpMux = "a=xrtcp-mux"; | 1166 const std::string kXRtcpMux = "a=xrtcp-mux"; |
| 1165 rtc::replace_substrs(kRtcpMux.c_str(), kRtcpMux.length(), | 1167 rtc::replace_substrs(kRtcpMux.c_str(), kRtcpMux.length(), |
| 1166 kXRtcpMux.c_str(), kXRtcpMux.length(), | 1168 kXRtcpMux.c_str(), kXRtcpMux.length(), |
| 1167 &sdp); | 1169 &sdp); |
| 1168 } | 1170 } |
| 1169 | 1171 |
| 1170 SessionDescriptionInterface* new_answer = CreateSessionDescription( | 1172 SessionDescriptionInterface* new_answer = |
| 1171 JsepSessionDescription::kAnswer, sdp, NULL); | 1173 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, nullptr); |
| 1172 | 1174 |
| 1173 // SetRemoteDescription to enable rtcp mux. | 1175 // SetRemoteDescription to enable rtcp mux. |
| 1174 SetRemoteDescriptionWithoutError(new_answer); | 1176 SetRemoteDescriptionWithoutError(new_answer); |
| 1175 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); | 1177 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); |
| 1176 EXPECT_EQ(expected_candidate_num, observer_.mline_0_candidates_.size()); | 1178 EXPECT_EQ(expected_candidate_num, observer_.mline_0_candidates_.size()); |
| 1177 if (bundle) { | 1179 if (bundle) { |
| 1178 EXPECT_EQ(0, observer_.mline_1_candidates_.size()); | 1180 EXPECT_EQ(0, observer_.mline_1_candidates_.size()); |
| 1179 } else { | 1181 } else { |
| 1180 EXPECT_EQ(expected_candidate_num, observer_.mline_1_candidates_.size()); | 1182 EXPECT_EQ(expected_candidate_num, observer_.mline_1_candidates_.size()); |
| 1181 } | 1183 } |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1317 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringGathering, | 1319 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringGathering, |
| 1318 observer_.ice_gathering_state_, kIceCandidatesTimeout); | 1320 observer_.ice_gathering_state_, kIceCandidatesTimeout); |
| 1319 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); | 1321 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); |
| 1320 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringComplete, | 1322 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringComplete, |
| 1321 observer_.ice_gathering_state_, kIceCandidatesTimeout); | 1323 observer_.ice_gathering_state_, kIceCandidatesTimeout); |
| 1322 | 1324 |
| 1323 std::string sdp; | 1325 std::string sdp; |
| 1324 offer->ToString(&sdp); | 1326 offer->ToString(&sdp); |
| 1325 SessionDescriptionInterface* desc = webrtc::CreateSessionDescription( | 1327 SessionDescriptionInterface* desc = webrtc::CreateSessionDescription( |
| 1326 JsepSessionDescription::kAnswer, sdp, nullptr); | 1328 JsepSessionDescription::kAnswer, sdp, nullptr); |
| 1327 ASSERT_TRUE(desc != NULL); | 1329 ASSERT_TRUE(desc != nullptr); |
| 1328 SetRemoteDescriptionWithoutError(desc); | 1330 SetRemoteDescriptionWithoutError(desc); |
| 1329 | 1331 |
| 1330 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionChecking, | 1332 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionChecking, |
| 1331 observer_.ice_connection_state_, kIceCandidatesTimeout); | 1333 observer_.ice_connection_state_, kIceCandidatesTimeout); |
| 1332 | 1334 |
| 1333 // The ice connection state is "Connected" too briefly to catch in a test. | 1335 // The ice connection state is "Connected" too briefly to catch in a test. |
| 1334 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, | 1336 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, |
| 1335 observer_.ice_connection_state_, kIceCandidatesTimeout); | 1337 observer_.ice_connection_state_, kIceCandidatesTimeout); |
| 1336 } | 1338 } |
| 1337 | 1339 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1407 std::vector<cricket::AudioCodec> codecs = | 1409 std::vector<cricket::AudioCodec> codecs = |
| 1408 media_engine_->audio_send_codecs(); | 1410 media_engine_->audio_send_codecs(); |
| 1409 codecs.push_back(kCNCodec1); | 1411 codecs.push_back(kCNCodec1); |
| 1410 codecs.push_back(kCNCodec2); | 1412 codecs.push_back(kCNCodec2); |
| 1411 media_engine_->SetAudioCodecs(codecs); | 1413 media_engine_->SetAudioCodecs(codecs); |
| 1412 desc_factory_->set_audio_codecs(codecs, codecs); | 1414 desc_factory_->set_audio_codecs(codecs, codecs); |
| 1413 } | 1415 } |
| 1414 | 1416 |
| 1415 bool VerifyNoCNCodecs(const cricket::ContentInfo* content) { | 1417 bool VerifyNoCNCodecs(const cricket::ContentInfo* content) { |
| 1416 const cricket::ContentDescription* description = content->description; | 1418 const cricket::ContentDescription* description = content->description; |
| 1417 RTC_CHECK(description != NULL); | 1419 RTC_CHECK(description != nullptr); |
| 1418 const cricket::AudioContentDescription* audio_content_desc = | 1420 const cricket::AudioContentDescription* audio_content_desc = |
| 1419 static_cast<const cricket::AudioContentDescription*>(description); | 1421 static_cast<const cricket::AudioContentDescription*>(description); |
| 1420 RTC_CHECK(audio_content_desc != NULL); | 1422 RTC_CHECK(audio_content_desc != nullptr); |
| 1421 for (size_t i = 0; i < audio_content_desc->codecs().size(); ++i) { | 1423 for (size_t i = 0; i < audio_content_desc->codecs().size(); ++i) { |
| 1422 if (audio_content_desc->codecs()[i].name == "CN") | 1424 if (audio_content_desc->codecs()[i].name == "CN") |
| 1423 return false; | 1425 return false; |
| 1424 } | 1426 } |
| 1425 return true; | 1427 return true; |
| 1426 } | 1428 } |
| 1427 | 1429 |
| 1428 void CreateDataChannel() { | 1430 void CreateDataChannel() { |
| 1429 webrtc::InternalDataChannelInit dci; | 1431 webrtc::InternalDataChannelInit dci; |
| 1430 RTC_CHECK(session_.get()); | 1432 RTC_CHECK(session_.get()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1453 } | 1455 } |
| 1454 | 1456 |
| 1455 void VerifyMultipleAsyncCreateDescriptionAfterInit( | 1457 void VerifyMultipleAsyncCreateDescriptionAfterInit( |
| 1456 bool success, CreateSessionDescriptionRequest::Type type) { | 1458 bool success, CreateSessionDescriptionRequest::Type type) { |
| 1457 RTC_CHECK(session_); | 1459 RTC_CHECK(session_); |
| 1458 SetFactoryDtlsSrtp(); | 1460 SetFactoryDtlsSrtp(); |
| 1459 if (type == CreateSessionDescriptionRequest::kAnswer) { | 1461 if (type == CreateSessionDescriptionRequest::kAnswer) { |
| 1460 cricket::MediaSessionOptions options; | 1462 cricket::MediaSessionOptions options; |
| 1461 std::unique_ptr<JsepSessionDescription> offer( | 1463 std::unique_ptr<JsepSessionDescription> offer( |
| 1462 CreateRemoteOffer(options, cricket::SEC_DISABLED)); | 1464 CreateRemoteOffer(options, cricket::SEC_DISABLED)); |
| 1463 ASSERT_TRUE(offer.get() != NULL); | 1465 ASSERT_TRUE(offer.get() != nullptr); |
| 1464 SetRemoteDescriptionWithoutError(offer.release()); | 1466 SetRemoteDescriptionWithoutError(offer.release()); |
| 1465 } | 1467 } |
| 1466 | 1468 |
| 1467 PeerConnectionInterface::RTCOfferAnswerOptions options; | 1469 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 1468 cricket::MediaSessionOptions session_options; | 1470 cricket::MediaSessionOptions session_options; |
| 1469 const int kNumber = 3; | 1471 const int kNumber = 3; |
| 1470 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> | 1472 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> |
| 1471 observers[kNumber]; | 1473 observers[kNumber]; |
| 1472 for (int i = 0; i < kNumber; ++i) { | 1474 for (int i = 0; i < kNumber; ++i) { |
| 1473 observers[i] = new WebRtcSessionCreateSDPObserverForTest(); | 1475 observers[i] = new WebRtcSessionCreateSDPObserverForTest(); |
| 1474 if (type == CreateSessionDescriptionRequest::kOffer) { | 1476 if (type == CreateSessionDescriptionRequest::kOffer) { |
| 1475 session_->CreateOffer(observers[i], options, session_options); | 1477 session_->CreateOffer(observers[i], options, session_options); |
| 1476 } else { | 1478 } else { |
| 1477 session_->CreateAnswer(observers[i], session_options); | 1479 session_->CreateAnswer(observers[i], session_options); |
| 1478 } | 1480 } |
| 1479 } | 1481 } |
| 1480 | 1482 |
| 1481 WebRtcSessionCreateSDPObserverForTest::State expected_state = | 1483 WebRtcSessionCreateSDPObserverForTest::State expected_state = |
| 1482 success ? WebRtcSessionCreateSDPObserverForTest::kSucceeded : | 1484 success ? WebRtcSessionCreateSDPObserverForTest::kSucceeded : |
| 1483 WebRtcSessionCreateSDPObserverForTest::kFailed; | 1485 WebRtcSessionCreateSDPObserverForTest::kFailed; |
| 1484 | 1486 |
| 1485 for (int i = 0; i < kNumber; ++i) { | 1487 for (int i = 0; i < kNumber; ++i) { |
| 1486 EXPECT_EQ_WAIT(expected_state, observers[i]->state(), 1000); | 1488 EXPECT_EQ_WAIT(expected_state, observers[i]->state(), 1000); |
| 1487 if (success) { | 1489 if (success) { |
| 1488 EXPECT_TRUE(observers[i]->description() != NULL); | 1490 EXPECT_TRUE(observers[i]->description() != nullptr); |
| 1489 } else { | 1491 } else { |
| 1490 EXPECT_TRUE(observers[i]->description() == NULL); | 1492 EXPECT_TRUE(observers[i]->description() == nullptr); |
| 1491 } | 1493 } |
| 1492 } | 1494 } |
| 1493 } | 1495 } |
| 1494 | 1496 |
| 1495 void ConfigureAllocatorWithTurn() { | 1497 void ConfigureAllocatorWithTurn() { |
| 1496 cricket::RelayServerConfig turn_server(cricket::RELAY_TURN); | 1498 cricket::RelayServerConfig turn_server(cricket::RELAY_TURN); |
| 1497 cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); | 1499 cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); |
| 1498 turn_server.credentials = credentials; | 1500 turn_server.credentials = credentials; |
| 1499 turn_server.ports.push_back( | 1501 turn_server.ports.push_back( |
| 1500 cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP)); | 1502 cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP)); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1596 EXPECT_EQ(6u, observer_.mline_0_candidates_.size()); | 1598 EXPECT_EQ(6u, observer_.mline_0_candidates_.size()); |
| 1597 EXPECT_EQ(6u, observer_.mline_1_candidates_.size()); | 1599 EXPECT_EQ(6u, observer_.mline_1_candidates_.size()); |
| 1598 // Destroy session before scoped fake clock goes out of scope to avoid TSan | 1600 // Destroy session before scoped fake clock goes out of scope to avoid TSan |
| 1599 // warning. | 1601 // warning. |
| 1600 session_->Close(); | 1602 session_->Close(); |
| 1601 session_.reset(nullptr); | 1603 session_.reset(nullptr); |
| 1602 } | 1604 } |
| 1603 | 1605 |
| 1604 TEST_F(WebRtcSessionTest, SetSdpFailedOnInvalidSdp) { | 1606 TEST_F(WebRtcSessionTest, SetSdpFailedOnInvalidSdp) { |
| 1605 Init(); | 1607 Init(); |
| 1606 SessionDescriptionInterface* offer = NULL; | 1608 SessionDescriptionInterface* offer = nullptr; |
| 1607 // Since |offer| is NULL, there's no way to tell if it's an offer or answer. | 1609 // Since |offer| is null, there's no way to tell if it's an offer or answer. |
| 1608 std::string unknown_action; | 1610 std::string unknown_action; |
| 1609 SetLocalDescriptionExpectError(unknown_action, kInvalidSdp, offer); | 1611 SetLocalDescriptionExpectError(unknown_action, kInvalidSdp, offer); |
| 1610 SetRemoteDescriptionExpectError(unknown_action, kInvalidSdp, offer); | 1612 SetRemoteDescriptionExpectError(unknown_action, kInvalidSdp, offer); |
| 1611 } | 1613 } |
| 1612 | 1614 |
| 1613 // Test creating offers and receive answers and make sure the | 1615 // Test creating offers and receive answers and make sure the |
| 1614 // media engine creates the expected send and receive streams. | 1616 // media engine creates the expected send and receive streams. |
| 1615 TEST_F(WebRtcSessionTest, TestCreateSdesOfferReceiveSdesAnswer) { | 1617 TEST_F(WebRtcSessionTest, TestCreateSdesOfferReceiveSdesAnswer) { |
| 1616 Init(); | 1618 Init(); |
| 1617 SendAudioVideoStream1(); | 1619 SendAudioVideoStream1(); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1722 // Make sure we have no send streams. | 1724 // Make sure we have no send streams. |
| 1723 EXPECT_EQ(0u, video_channel_->send_streams().size()); | 1725 EXPECT_EQ(0u, video_channel_->send_streams().size()); |
| 1724 EXPECT_EQ(0u, voice_channel_->send_streams().size()); | 1726 EXPECT_EQ(0u, voice_channel_->send_streams().size()); |
| 1725 } | 1727 } |
| 1726 | 1728 |
| 1727 TEST_F(WebRtcSessionTest, SetLocalSdpFailedOnCreateChannel) { | 1729 TEST_F(WebRtcSessionTest, SetLocalSdpFailedOnCreateChannel) { |
| 1728 Init(); | 1730 Init(); |
| 1729 media_engine_->set_fail_create_channel(true); | 1731 media_engine_->set_fail_create_channel(true); |
| 1730 | 1732 |
| 1731 SessionDescriptionInterface* offer = CreateOffer(); | 1733 SessionDescriptionInterface* offer = CreateOffer(); |
| 1732 ASSERT_TRUE(offer != NULL); | 1734 ASSERT_TRUE(offer != nullptr); |
| 1733 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1735 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1734 // the offer. | 1736 // the offer. |
| 1735 SetRemoteDescriptionOfferExpectError(kCreateChannelFailed, offer); | 1737 SetRemoteDescriptionOfferExpectError(kCreateChannelFailed, offer); |
| 1736 offer = CreateOffer(); | 1738 offer = CreateOffer(); |
| 1737 ASSERT_TRUE(offer != NULL); | 1739 ASSERT_TRUE(offer != nullptr); |
| 1738 SetLocalDescriptionOfferExpectError(kCreateChannelFailed, offer); | 1740 SetLocalDescriptionOfferExpectError(kCreateChannelFailed, offer); |
| 1739 } | 1741 } |
| 1740 | 1742 |
| 1741 // | 1743 // |
| 1742 // Tests for creating/setting SDP under different SDES/DTLS polices: | 1744 // Tests for creating/setting SDP under different SDES/DTLS polices: |
| 1743 // | 1745 // |
| 1744 // --DTLS off and SDES on | 1746 // --DTLS off and SDES on |
| 1745 // TestCreateSdesOfferReceiveSdesAnswer/TestReceiveSdesOfferCreateSdesAnswer: | 1747 // TestCreateSdesOfferReceiveSdesAnswer/TestReceiveSdesOfferCreateSdesAnswer: |
| 1746 // set local/remote offer/answer with crypto --> success | 1748 // set local/remote offer/answer with crypto --> success |
| 1747 // TestSetNonSdesOfferWhenSdesOn: set local/remote offer without crypto ---> | 1749 // TestSetNonSdesOfferWhenSdesOn: set local/remote offer without crypto ---> |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1769 // | 1771 // |
| 1770 | 1772 |
| 1771 // Test that we return a failure when applying a remote/local offer that doesn't | 1773 // Test that we return a failure when applying a remote/local offer that doesn't |
| 1772 // have cryptos enabled when DTLS is off. | 1774 // have cryptos enabled when DTLS is off. |
| 1773 TEST_F(WebRtcSessionTest, TestSetNonSdesOfferWhenSdesOn) { | 1775 TEST_F(WebRtcSessionTest, TestSetNonSdesOfferWhenSdesOn) { |
| 1774 Init(); | 1776 Init(); |
| 1775 cricket::MediaSessionOptions options; | 1777 cricket::MediaSessionOptions options; |
| 1776 options.recv_video = true; | 1778 options.recv_video = true; |
| 1777 JsepSessionDescription* offer = CreateRemoteOffer( | 1779 JsepSessionDescription* offer = CreateRemoteOffer( |
| 1778 options, cricket::SEC_DISABLED); | 1780 options, cricket::SEC_DISABLED); |
| 1779 ASSERT_TRUE(offer != NULL); | 1781 ASSERT_TRUE(offer != nullptr); |
| 1780 VerifyNoCryptoParams(offer->description(), false); | 1782 VerifyNoCryptoParams(offer->description(), false); |
| 1781 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1783 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1782 // the offer. | 1784 // the offer. |
| 1783 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer); | 1785 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer); |
| 1784 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); | 1786 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 1785 ASSERT_TRUE(offer != NULL); | 1787 ASSERT_TRUE(offer != nullptr); |
| 1786 SetLocalDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer); | 1788 SetLocalDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer); |
| 1787 } | 1789 } |
| 1788 | 1790 |
| 1789 // Test that we return a failure when applying a local answer that doesn't have | 1791 // Test that we return a failure when applying a local answer that doesn't have |
| 1790 // cryptos enabled when DTLS is off. | 1792 // cryptos enabled when DTLS is off. |
| 1791 TEST_F(WebRtcSessionTest, TestSetLocalNonSdesAnswerWhenSdesOn) { | 1793 TEST_F(WebRtcSessionTest, TestSetLocalNonSdesAnswerWhenSdesOn) { |
| 1792 Init(); | 1794 Init(); |
| 1793 SessionDescriptionInterface* offer = NULL; | 1795 SessionDescriptionInterface* offer = nullptr; |
| 1794 SessionDescriptionInterface* answer = NULL; | 1796 SessionDescriptionInterface* answer = nullptr; |
| 1795 CreateCryptoOfferAndNonCryptoAnswer(&offer, &answer); | 1797 CreateCryptoOfferAndNonCryptoAnswer(&offer, &answer); |
| 1796 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1798 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1797 // the offer. | 1799 // the offer. |
| 1798 SetRemoteDescriptionWithoutError(offer); | 1800 SetRemoteDescriptionWithoutError(offer); |
| 1799 SetLocalDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); | 1801 SetLocalDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); |
| 1800 } | 1802 } |
| 1801 | 1803 |
| 1802 // Test we will return fail when apply an remote answer that doesn't have | 1804 // Test we will return fail when apply an remote answer that doesn't have |
| 1803 // crypto enabled when DTLS is off. | 1805 // crypto enabled when DTLS is off. |
| 1804 TEST_F(WebRtcSessionTest, TestSetRemoteNonSdesAnswerWhenSdesOn) { | 1806 TEST_F(WebRtcSessionTest, TestSetRemoteNonSdesAnswerWhenSdesOn) { |
| 1805 Init(); | 1807 Init(); |
| 1806 SessionDescriptionInterface* offer = NULL; | 1808 SessionDescriptionInterface* offer = nullptr; |
| 1807 SessionDescriptionInterface* answer = NULL; | 1809 SessionDescriptionInterface* answer = nullptr; |
| 1808 CreateCryptoOfferAndNonCryptoAnswer(&offer, &answer); | 1810 CreateCryptoOfferAndNonCryptoAnswer(&offer, &answer); |
| 1809 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1811 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1810 // the offer. | 1812 // the offer. |
| 1811 SetLocalDescriptionWithoutError(offer); | 1813 SetLocalDescriptionWithoutError(offer); |
| 1812 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); | 1814 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); |
| 1813 } | 1815 } |
| 1814 | 1816 |
| 1815 // Test that we accept an offer with a DTLS fingerprint when DTLS is on | 1817 // Test that we accept an offer with a DTLS fingerprint when DTLS is on |
| 1816 // and that we return an answer with a DTLS fingerprint. | 1818 // and that we return an answer with a DTLS fingerprint. |
| 1817 TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { | 1819 TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { |
| 1818 SendAudioVideoStream1(); | 1820 SendAudioVideoStream1(); |
| 1819 InitWithDtls(GetParam()); | 1821 InitWithDtls(GetParam()); |
| 1820 SetFactoryDtlsSrtp(); | 1822 SetFactoryDtlsSrtp(); |
| 1821 cricket::MediaSessionOptions options; | 1823 cricket::MediaSessionOptions options; |
| 1822 options.recv_video = true; | 1824 options.recv_video = true; |
| 1823 JsepSessionDescription* offer = | 1825 JsepSessionDescription* offer = |
| 1824 CreateRemoteOffer(options, cricket::SEC_DISABLED); | 1826 CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 1825 ASSERT_TRUE(offer != NULL); | 1827 ASSERT_TRUE(offer != nullptr); |
| 1826 VerifyFingerprintStatus(offer->description(), true); | 1828 VerifyFingerprintStatus(offer->description(), true); |
| 1827 VerifyNoCryptoParams(offer->description(), true); | 1829 VerifyNoCryptoParams(offer->description(), true); |
| 1828 | 1830 |
| 1829 // SetRemoteDescription will take the ownership of the offer. | 1831 // SetRemoteDescription will take the ownership of the offer. |
| 1830 SetRemoteDescriptionWithoutError(offer); | 1832 SetRemoteDescriptionWithoutError(offer); |
| 1831 | 1833 |
| 1832 // Verify that we get a crypto fingerprint in the answer. | 1834 // Verify that we get a crypto fingerprint in the answer. |
| 1833 SessionDescriptionInterface* answer = CreateAnswer(); | 1835 SessionDescriptionInterface* answer = CreateAnswer(); |
| 1834 ASSERT_TRUE(answer != NULL); | 1836 ASSERT_TRUE(answer != nullptr); |
| 1835 VerifyFingerprintStatus(answer->description(), true); | 1837 VerifyFingerprintStatus(answer->description(), true); |
| 1836 // Check that we don't have an a=crypto line in the answer. | 1838 // Check that we don't have an a=crypto line in the answer. |
| 1837 VerifyNoCryptoParams(answer->description(), true); | 1839 VerifyNoCryptoParams(answer->description(), true); |
| 1838 | 1840 |
| 1839 // Now set the local description, which should work, even without a=crypto. | 1841 // Now set the local description, which should work, even without a=crypto. |
| 1840 SetLocalDescriptionWithoutError(answer); | 1842 SetLocalDescriptionWithoutError(answer); |
| 1841 } | 1843 } |
| 1842 | 1844 |
| 1843 // Test that we set a local offer with a DTLS fingerprint when DTLS is on | 1845 // Test that we set a local offer with a DTLS fingerprint when DTLS is on |
| 1844 // and then we accept a remote answer with a DTLS fingerprint successfully. | 1846 // and then we accept a remote answer with a DTLS fingerprint successfully. |
| 1845 TEST_P(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { | 1847 TEST_P(WebRtcSessionTest, TestCreateDtlsOfferReceiveDtlsAnswer) { |
| 1846 SendAudioVideoStream1(); | 1848 SendAudioVideoStream1(); |
| 1847 InitWithDtls(GetParam()); | 1849 InitWithDtls(GetParam()); |
| 1848 SetFactoryDtlsSrtp(); | 1850 SetFactoryDtlsSrtp(); |
| 1849 | 1851 |
| 1850 // Verify that we get a crypto fingerprint in the answer. | 1852 // Verify that we get a crypto fingerprint in the answer. |
| 1851 SessionDescriptionInterface* offer = CreateOffer(); | 1853 SessionDescriptionInterface* offer = CreateOffer(); |
| 1852 ASSERT_TRUE(offer != NULL); | 1854 ASSERT_TRUE(offer != nullptr); |
| 1853 VerifyFingerprintStatus(offer->description(), true); | 1855 VerifyFingerprintStatus(offer->description(), true); |
| 1854 // Check that we don't have an a=crypto line in the offer. | 1856 // Check that we don't have an a=crypto line in the offer. |
| 1855 VerifyNoCryptoParams(offer->description(), true); | 1857 VerifyNoCryptoParams(offer->description(), true); |
| 1856 | 1858 |
| 1857 // Now set the local description, which should work, even without a=crypto. | 1859 // Now set the local description, which should work, even without a=crypto. |
| 1858 SetLocalDescriptionWithoutError(offer); | 1860 SetLocalDescriptionWithoutError(offer); |
| 1859 | 1861 |
| 1860 cricket::MediaSessionOptions options; | 1862 cricket::MediaSessionOptions options; |
| 1861 options.recv_video = true; | 1863 options.recv_video = true; |
| 1862 JsepSessionDescription* answer = | 1864 JsepSessionDescription* answer = |
| 1863 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); | 1865 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); |
| 1864 ASSERT_TRUE(answer != NULL); | 1866 ASSERT_TRUE(answer != nullptr); |
| 1865 VerifyFingerprintStatus(answer->description(), true); | 1867 VerifyFingerprintStatus(answer->description(), true); |
| 1866 VerifyNoCryptoParams(answer->description(), true); | 1868 VerifyNoCryptoParams(answer->description(), true); |
| 1867 | 1869 |
| 1868 // SetRemoteDescription will take the ownership of the answer. | 1870 // SetRemoteDescription will take the ownership of the answer. |
| 1869 SetRemoteDescriptionWithoutError(answer); | 1871 SetRemoteDescriptionWithoutError(answer); |
| 1870 } | 1872 } |
| 1871 | 1873 |
| 1872 // Test that if we support DTLS and the other side didn't offer a fingerprint, | 1874 // Test that if we support DTLS and the other side didn't offer a fingerprint, |
| 1873 // we will fail to set the remote description. | 1875 // we will fail to set the remote description. |
| 1874 TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { | 1876 TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { |
| 1875 InitWithDtls(GetParam()); | 1877 InitWithDtls(GetParam()); |
| 1876 cricket::MediaSessionOptions options; | 1878 cricket::MediaSessionOptions options; |
| 1877 options.recv_video = true; | 1879 options.recv_video = true; |
| 1878 options.bundle_enabled = true; | 1880 options.bundle_enabled = true; |
| 1879 JsepSessionDescription* offer = CreateRemoteOffer( | 1881 JsepSessionDescription* offer = CreateRemoteOffer( |
| 1880 options, cricket::SEC_REQUIRED); | 1882 options, cricket::SEC_REQUIRED); |
| 1881 ASSERT_TRUE(offer != NULL); | 1883 ASSERT_TRUE(offer != nullptr); |
| 1882 VerifyFingerprintStatus(offer->description(), false); | 1884 VerifyFingerprintStatus(offer->description(), false); |
| 1883 VerifyCryptoParams(offer->description()); | 1885 VerifyCryptoParams(offer->description()); |
| 1884 | 1886 |
| 1885 // SetRemoteDescription will take the ownership of the offer. | 1887 // SetRemoteDescription will take the ownership of the offer. |
| 1886 SetRemoteDescriptionOfferExpectError( | 1888 SetRemoteDescriptionOfferExpectError( |
| 1887 kSdpWithoutDtlsFingerprint, offer); | 1889 kSdpWithoutDtlsFingerprint, offer); |
| 1888 | 1890 |
| 1889 offer = CreateRemoteOffer(options, cricket::SEC_REQUIRED); | 1891 offer = CreateRemoteOffer(options, cricket::SEC_REQUIRED); |
| 1890 // SetLocalDescription will take the ownership of the offer. | 1892 // SetLocalDescription will take the ownership of the offer. |
| 1891 SetLocalDescriptionOfferExpectError( | 1893 SetLocalDescriptionOfferExpectError( |
| 1892 kSdpWithoutDtlsFingerprint, offer); | 1894 kSdpWithoutDtlsFingerprint, offer); |
| 1893 } | 1895 } |
| 1894 | 1896 |
| 1895 // Test that we return a failure when applying a local answer that doesn't have | 1897 // Test that we return a failure when applying a local answer that doesn't have |
| 1896 // a DTLS fingerprint when DTLS is required. | 1898 // a DTLS fingerprint when DTLS is required. |
| 1897 TEST_P(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { | 1899 TEST_P(WebRtcSessionTest, TestSetLocalNonDtlsAnswerWhenDtlsOn) { |
| 1898 InitWithDtls(GetParam()); | 1900 InitWithDtls(GetParam()); |
| 1899 SessionDescriptionInterface* offer = NULL; | 1901 SessionDescriptionInterface* offer = nullptr; |
| 1900 SessionDescriptionInterface* answer = NULL; | 1902 SessionDescriptionInterface* answer = nullptr; |
| 1901 CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer); | 1903 CreateDtlsOfferAndNonDtlsAnswer(&offer, &answer); |
| 1902 | 1904 |
| 1903 // SetRemoteDescription and SetLocalDescription will take the ownership of | 1905 // SetRemoteDescription and SetLocalDescription will take the ownership of |
| 1904 // the offer and answer. | 1906 // the offer and answer. |
| 1905 SetRemoteDescriptionWithoutError(offer); | 1907 SetRemoteDescriptionWithoutError(offer); |
| 1906 SetLocalDescriptionAnswerExpectError( | 1908 SetLocalDescriptionAnswerExpectError( |
| 1907 kSdpWithoutDtlsFingerprint, answer); | 1909 kSdpWithoutDtlsFingerprint, answer); |
| 1908 } | 1910 } |
| 1909 | 1911 |
| 1910 // Test that we return a failure when applying a remote answer that doesn't have | 1912 // Test that we return a failure when applying a remote answer that doesn't have |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1928 | 1930 |
| 1929 // Test that we create a local offer without SDES or DTLS and accept a remote | 1931 // Test that we create a local offer without SDES or DTLS and accept a remote |
| 1930 // answer without SDES or DTLS when encryption is disabled. | 1932 // answer without SDES or DTLS when encryption is disabled. |
| 1931 TEST_P(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { | 1933 TEST_P(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { |
| 1932 SendAudioVideoStream1(); | 1934 SendAudioVideoStream1(); |
| 1933 options_.disable_encryption = true; | 1935 options_.disable_encryption = true; |
| 1934 InitWithDtls(GetParam()); | 1936 InitWithDtls(GetParam()); |
| 1935 | 1937 |
| 1936 // Verify that we get a crypto fingerprint in the answer. | 1938 // Verify that we get a crypto fingerprint in the answer. |
| 1937 SessionDescriptionInterface* offer = CreateOffer(); | 1939 SessionDescriptionInterface* offer = CreateOffer(); |
| 1938 ASSERT_TRUE(offer != NULL); | 1940 ASSERT_TRUE(offer != nullptr); |
| 1939 VerifyFingerprintStatus(offer->description(), false); | 1941 VerifyFingerprintStatus(offer->description(), false); |
| 1940 // Check that we don't have an a=crypto line in the offer. | 1942 // Check that we don't have an a=crypto line in the offer. |
| 1941 VerifyNoCryptoParams(offer->description(), false); | 1943 VerifyNoCryptoParams(offer->description(), false); |
| 1942 | 1944 |
| 1943 // Now set the local description, which should work, even without a=crypto. | 1945 // Now set the local description, which should work, even without a=crypto. |
| 1944 SetLocalDescriptionWithoutError(offer); | 1946 SetLocalDescriptionWithoutError(offer); |
| 1945 | 1947 |
| 1946 cricket::MediaSessionOptions options; | 1948 cricket::MediaSessionOptions options; |
| 1947 options.recv_video = true; | 1949 options.recv_video = true; |
| 1948 JsepSessionDescription* answer = | 1950 JsepSessionDescription* answer = |
| 1949 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); | 1951 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); |
| 1950 ASSERT_TRUE(answer != NULL); | 1952 ASSERT_TRUE(answer != nullptr); |
| 1951 VerifyFingerprintStatus(answer->description(), false); | 1953 VerifyFingerprintStatus(answer->description(), false); |
| 1952 VerifyNoCryptoParams(answer->description(), false); | 1954 VerifyNoCryptoParams(answer->description(), false); |
| 1953 | 1955 |
| 1954 // SetRemoteDescription will take the ownership of the answer. | 1956 // SetRemoteDescription will take the ownership of the answer. |
| 1955 SetRemoteDescriptionWithoutError(answer); | 1957 SetRemoteDescriptionWithoutError(answer); |
| 1956 } | 1958 } |
| 1957 | 1959 |
| 1958 // Test that we create a local answer without SDES or DTLS and accept a remote | 1960 // Test that we create a local answer without SDES or DTLS and accept a remote |
| 1959 // offer without SDES or DTLS when encryption is disabled. | 1961 // offer without SDES or DTLS when encryption is disabled. |
| 1960 TEST_P(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) { | 1962 TEST_P(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) { |
| 1961 options_.disable_encryption = true; | 1963 options_.disable_encryption = true; |
| 1962 InitWithDtls(GetParam()); | 1964 InitWithDtls(GetParam()); |
| 1963 | 1965 |
| 1964 cricket::MediaSessionOptions options; | 1966 cricket::MediaSessionOptions options; |
| 1965 options.recv_video = true; | 1967 options.recv_video = true; |
| 1966 JsepSessionDescription* offer = | 1968 JsepSessionDescription* offer = |
| 1967 CreateRemoteOffer(options, cricket::SEC_DISABLED); | 1969 CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 1968 ASSERT_TRUE(offer != NULL); | 1970 ASSERT_TRUE(offer != nullptr); |
| 1969 VerifyFingerprintStatus(offer->description(), false); | 1971 VerifyFingerprintStatus(offer->description(), false); |
| 1970 VerifyNoCryptoParams(offer->description(), false); | 1972 VerifyNoCryptoParams(offer->description(), false); |
| 1971 | 1973 |
| 1972 // SetRemoteDescription will take the ownership of the offer. | 1974 // SetRemoteDescription will take the ownership of the offer. |
| 1973 SetRemoteDescriptionWithoutError(offer); | 1975 SetRemoteDescriptionWithoutError(offer); |
| 1974 | 1976 |
| 1975 // Verify that we get a crypto fingerprint in the answer. | 1977 // Verify that we get a crypto fingerprint in the answer. |
| 1976 SessionDescriptionInterface* answer = CreateAnswer(); | 1978 SessionDescriptionInterface* answer = CreateAnswer(); |
| 1977 ASSERT_TRUE(answer != NULL); | 1979 ASSERT_TRUE(answer != nullptr); |
| 1978 VerifyFingerprintStatus(answer->description(), false); | 1980 VerifyFingerprintStatus(answer->description(), false); |
| 1979 // Check that we don't have an a=crypto line in the answer. | 1981 // Check that we don't have an a=crypto line in the answer. |
| 1980 VerifyNoCryptoParams(answer->description(), false); | 1982 VerifyNoCryptoParams(answer->description(), false); |
| 1981 | 1983 |
| 1982 // Now set the local description, which should work, even without a=crypto. | 1984 // Now set the local description, which should work, even without a=crypto. |
| 1983 SetLocalDescriptionWithoutError(answer); | 1985 SetLocalDescriptionWithoutError(answer); |
| 1984 } | 1986 } |
| 1985 | 1987 |
| 1986 // Test that we can create and set an answer correctly when different | 1988 // Test that we can create and set an answer correctly when different |
| 1987 // SSL roles have been negotiated for different transports. | 1989 // SSL roles have been negotiated for different transports. |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2184 | 2186 |
| 2185 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate1)); | 2187 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate1)); |
| 2186 candidate.set_component(2); | 2188 candidate.set_component(2); |
| 2187 candidate.set_address(rtc::SocketAddress("2.2.2.2", 6000)); | 2189 candidate.set_address(rtc::SocketAddress("2.2.2.2", 6000)); |
| 2188 JsepIceCandidate ice_candidate2(kMediaContentName0, 0, candidate); | 2190 JsepIceCandidate ice_candidate2(kMediaContentName0, 0, candidate); |
| 2189 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate2)); | 2191 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate2)); |
| 2190 | 2192 |
| 2191 // Verifying the candidates are copied properly from internal vector. | 2193 // Verifying the candidates are copied properly from internal vector. |
| 2192 const SessionDescriptionInterface* remote_desc = | 2194 const SessionDescriptionInterface* remote_desc = |
| 2193 session_->remote_description(); | 2195 session_->remote_description(); |
| 2194 ASSERT_TRUE(remote_desc != NULL); | 2196 ASSERT_TRUE(remote_desc != nullptr); |
| 2195 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); | 2197 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); |
| 2196 const IceCandidateCollection* candidates = | 2198 const IceCandidateCollection* candidates = |
| 2197 remote_desc->candidates(kMediaContentIndex0); | 2199 remote_desc->candidates(kMediaContentIndex0); |
| 2198 ASSERT_EQ(2u, candidates->count()); | 2200 ASSERT_EQ(2u, candidates->count()); |
| 2199 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); | 2201 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); |
| 2200 EXPECT_EQ(kMediaContentName0, candidates->at(0)->sdp_mid()); | 2202 EXPECT_EQ(kMediaContentName0, candidates->at(0)->sdp_mid()); |
| 2201 EXPECT_EQ(1, candidates->at(0)->candidate().component()); | 2203 EXPECT_EQ(1, candidates->at(0)->candidate().component()); |
| 2202 EXPECT_EQ(2, candidates->at(1)->candidate().component()); | 2204 EXPECT_EQ(2, candidates->at(1)->candidate().component()); |
| 2203 | 2205 |
| 2204 // |ice_candidate3| is identical to |ice_candidate2|. It can be added | 2206 // |ice_candidate3| is identical to |ice_candidate2|. It can be added |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2226 cricket::Candidate candidate1; | 2228 cricket::Candidate candidate1; |
| 2227 candidate1.set_component(1); | 2229 candidate1.set_component(1); |
| 2228 JsepIceCandidate ice_candidate1(kMediaContentName0, kMediaContentIndex0, | 2230 JsepIceCandidate ice_candidate1(kMediaContentName0, kMediaContentIndex0, |
| 2229 candidate1); | 2231 candidate1); |
| 2230 SendAudioVideoStream1(); | 2232 SendAudioVideoStream1(); |
| 2231 CreateAndSetRemoteOfferAndLocalAnswer(); | 2233 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2232 | 2234 |
| 2233 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate1)); | 2235 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate1)); |
| 2234 const SessionDescriptionInterface* remote_desc = | 2236 const SessionDescriptionInterface* remote_desc = |
| 2235 session_->remote_description(); | 2237 session_->remote_description(); |
| 2236 ASSERT_TRUE(remote_desc != NULL); | 2238 ASSERT_TRUE(remote_desc != nullptr); |
| 2237 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); | 2239 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); |
| 2238 const IceCandidateCollection* candidates = | 2240 const IceCandidateCollection* candidates = |
| 2239 remote_desc->candidates(kMediaContentIndex0); | 2241 remote_desc->candidates(kMediaContentIndex0); |
| 2240 ASSERT_EQ(1u, candidates->count()); | 2242 ASSERT_EQ(1u, candidates->count()); |
| 2241 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); | 2243 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); |
| 2242 | 2244 |
| 2243 // Update the RemoteSessionDescription with a new session description and | 2245 // Update the RemoteSessionDescription with a new session description and |
| 2244 // a candidate and check that the new remote session description contains both | 2246 // a candidate and check that the new remote session description contains both |
| 2245 // candidates. | 2247 // candidates. |
| 2246 SessionDescriptionInterface* offer = CreateRemoteOffer(); | 2248 SessionDescriptionInterface* offer = CreateRemoteOffer(); |
| 2247 cricket::Candidate candidate2; | 2249 cricket::Candidate candidate2; |
| 2248 JsepIceCandidate ice_candidate2(kMediaContentName0, kMediaContentIndex0, | 2250 JsepIceCandidate ice_candidate2(kMediaContentName0, kMediaContentIndex0, |
| 2249 candidate2); | 2251 candidate2); |
| 2250 EXPECT_TRUE(offer->AddCandidate(&ice_candidate2)); | 2252 EXPECT_TRUE(offer->AddCandidate(&ice_candidate2)); |
| 2251 SetRemoteDescriptionWithoutError(offer); | 2253 SetRemoteDescriptionWithoutError(offer); |
| 2252 | 2254 |
| 2253 remote_desc = session_->remote_description(); | 2255 remote_desc = session_->remote_description(); |
| 2254 ASSERT_TRUE(remote_desc != NULL); | 2256 ASSERT_TRUE(remote_desc != nullptr); |
| 2255 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); | 2257 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); |
| 2256 candidates = remote_desc->candidates(kMediaContentIndex0); | 2258 candidates = remote_desc->candidates(kMediaContentIndex0); |
| 2257 ASSERT_EQ(2u, candidates->count()); | 2259 ASSERT_EQ(2u, candidates->count()); |
| 2258 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); | 2260 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); |
| 2259 // Username and password have be updated with the TransportInfo of the | 2261 // Username and password have be updated with the TransportInfo of the |
| 2260 // SessionDescription, won't be equal to the original one. | 2262 // SessionDescription, won't be equal to the original one. |
| 2261 candidate2.set_username(candidates->at(0)->candidate().username()); | 2263 candidate2.set_username(candidates->at(0)->candidate().username()); |
| 2262 candidate2.set_password(candidates->at(0)->candidate().password()); | 2264 candidate2.set_password(candidates->at(0)->candidate().password()); |
| 2263 EXPECT_TRUE(candidate2.IsEquivalent(candidates->at(0)->candidate())); | 2265 EXPECT_TRUE(candidate2.IsEquivalent(candidates->at(0)->candidate())); |
| 2264 EXPECT_EQ(kMediaContentIndex0, candidates->at(1)->sdp_mline_index()); | 2266 EXPECT_EQ(kMediaContentIndex0, candidates->at(1)->sdp_mline_index()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2282 // Enable Continual Gathering. | 2284 // Enable Continual Gathering. |
| 2283 cricket::IceConfig config; | 2285 cricket::IceConfig config; |
| 2284 config.continual_gathering_policy = cricket::GATHER_CONTINUALLY; | 2286 config.continual_gathering_policy = cricket::GATHER_CONTINUALLY; |
| 2285 session_->SetIceConfig(config); | 2287 session_->SetIceConfig(config); |
| 2286 SendAudioVideoStream1(); | 2288 SendAudioVideoStream1(); |
| 2287 CreateAndSetRemoteOfferAndLocalAnswer(); | 2289 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2288 | 2290 |
| 2289 const SessionDescriptionInterface* local_desc = session_->local_description(); | 2291 const SessionDescriptionInterface* local_desc = session_->local_description(); |
| 2290 const IceCandidateCollection* candidates = | 2292 const IceCandidateCollection* candidates = |
| 2291 local_desc->candidates(kMediaContentIndex0); | 2293 local_desc->candidates(kMediaContentIndex0); |
| 2292 ASSERT_TRUE(candidates != NULL); | 2294 ASSERT_TRUE(candidates != nullptr); |
| 2293 EXPECT_EQ(0u, candidates->count()); | 2295 EXPECT_EQ(0u, candidates->count()); |
| 2294 | 2296 |
| 2295 // Since we're using continual gathering, we won't get "gathering done". | 2297 // Since we're using continual gathering, we won't get "gathering done". |
| 2296 EXPECT_EQ_WAIT(2u, candidates->count(), kIceCandidatesTimeout); | 2298 EXPECT_EQ_WAIT(2u, candidates->count(), kIceCandidatesTimeout); |
| 2297 | 2299 |
| 2298 local_desc = session_->local_description(); | 2300 local_desc = session_->local_description(); |
| 2299 candidates = local_desc->candidates(kMediaContentIndex0); | 2301 candidates = local_desc->candidates(kMediaContentIndex0); |
| 2300 ASSERT_TRUE(candidates != NULL); | 2302 ASSERT_TRUE(candidates != nullptr); |
| 2301 EXPECT_LT(0u, candidates->count()); | 2303 EXPECT_LT(0u, candidates->count()); |
| 2302 candidates = local_desc->candidates(1); | 2304 candidates = local_desc->candidates(1); |
| 2303 ASSERT_TRUE(candidates != NULL); | 2305 ASSERT_TRUE(candidates != nullptr); |
| 2304 EXPECT_EQ(0u, candidates->count()); | 2306 EXPECT_EQ(0u, candidates->count()); |
| 2305 | 2307 |
| 2306 // Update the session descriptions. | 2308 // Update the session descriptions. |
| 2307 SendAudioVideoStream1(); | 2309 SendAudioVideoStream1(); |
| 2308 CreateAndSetRemoteOfferAndLocalAnswer(); | 2310 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2309 | 2311 |
| 2310 local_desc = session_->local_description(); | 2312 local_desc = session_->local_description(); |
| 2311 candidates = local_desc->candidates(kMediaContentIndex0); | 2313 candidates = local_desc->candidates(kMediaContentIndex0); |
| 2312 ASSERT_TRUE(candidates != NULL); | 2314 ASSERT_TRUE(candidates != nullptr); |
| 2313 EXPECT_LT(0u, candidates->count()); | 2315 EXPECT_LT(0u, candidates->count()); |
| 2314 candidates = local_desc->candidates(1); | 2316 candidates = local_desc->candidates(1); |
| 2315 ASSERT_TRUE(candidates != NULL); | 2317 ASSERT_TRUE(candidates != nullptr); |
| 2316 EXPECT_EQ(0u, candidates->count()); | 2318 EXPECT_EQ(0u, candidates->count()); |
| 2317 | 2319 |
| 2318 candidates = local_desc->candidates(kMediaContentIndex0); | 2320 candidates = local_desc->candidates(kMediaContentIndex0); |
| 2319 size_t num_local_candidates = candidates->count(); | 2321 size_t num_local_candidates = candidates->count(); |
| 2320 // Bring down the network interface to trigger candidate removals. | 2322 // Bring down the network interface to trigger candidate removals. |
| 2321 RemoveInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); | 2323 RemoveInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); |
| 2322 // Verify that all local candidates are removed. | 2324 // Verify that all local candidates are removed. |
| 2323 EXPECT_EQ(0, observer_.num_candidates_removed_); | 2325 EXPECT_EQ(0, observer_.num_candidates_removed_); |
| 2324 EXPECT_EQ_WAIT(num_local_candidates, observer_.num_candidates_removed_, | 2326 EXPECT_EQ_WAIT(num_local_candidates, observer_.num_candidates_removed_, |
| 2325 kIceCandidatesTimeout); | 2327 kIceCandidatesTimeout); |
| 2326 EXPECT_EQ_WAIT(0u, candidates->count(), kIceCandidatesTimeout); | 2328 EXPECT_EQ_WAIT(0u, candidates->count(), kIceCandidatesTimeout); |
| 2327 } | 2329 } |
| 2328 | 2330 |
| 2329 // Tests that if continual gathering is disabled, local candidates won't be | 2331 // Tests that if continual gathering is disabled, local candidates won't be |
| 2330 // removed when the interface is turned down. | 2332 // removed when the interface is turned down. |
| 2331 TEST_F(WebRtcSessionTest, TestLocalCandidatesNotRemovedIfNotGatherContinually) { | 2333 TEST_F(WebRtcSessionTest, TestLocalCandidatesNotRemovedIfNotGatherContinually) { |
| 2332 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); | 2334 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); |
| 2333 Init(); | 2335 Init(); |
| 2334 SendAudioVideoStream1(); | 2336 SendAudioVideoStream1(); |
| 2335 CreateAndSetRemoteOfferAndLocalAnswer(); | 2337 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2336 | 2338 |
| 2337 const SessionDescriptionInterface* local_desc = session_->local_description(); | 2339 const SessionDescriptionInterface* local_desc = session_->local_description(); |
| 2338 const IceCandidateCollection* candidates = | 2340 const IceCandidateCollection* candidates = |
| 2339 local_desc->candidates(kMediaContentIndex0); | 2341 local_desc->candidates(kMediaContentIndex0); |
| 2340 ASSERT_TRUE(candidates != NULL); | 2342 ASSERT_TRUE(candidates != nullptr); |
| 2341 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); | 2343 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); |
| 2342 | 2344 |
| 2343 size_t num_local_candidates = candidates->count(); | 2345 size_t num_local_candidates = candidates->count(); |
| 2344 EXPECT_LT(0u, num_local_candidates); | 2346 EXPECT_LT(0u, num_local_candidates); |
| 2345 // By default, Continual Gathering is disabled. | 2347 // By default, Continual Gathering is disabled. |
| 2346 // Bring down the network interface. | 2348 // Bring down the network interface. |
| 2347 RemoveInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); | 2349 RemoveInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); |
| 2348 // Verify that the local candidates are not removed. | 2350 // Verify that the local candidates are not removed. |
| 2349 rtc::Thread::Current()->ProcessMessages(1000); | 2351 rtc::Thread::Current()->ProcessMessages(1000); |
| 2350 EXPECT_EQ(0, observer_.num_candidates_removed_); | 2352 EXPECT_EQ(0, observer_.num_candidates_removed_); |
| 2351 EXPECT_EQ(num_local_candidates, candidates->count()); | 2353 EXPECT_EQ(num_local_candidates, candidates->count()); |
| 2352 } | 2354 } |
| 2353 | 2355 |
| 2354 // Test that we can set a remote session description with remote candidates. | 2356 // Test that we can set a remote session description with remote candidates. |
| 2355 TEST_F(WebRtcSessionTest, TestSetRemoteSessionDescriptionWithCandidates) { | 2357 TEST_F(WebRtcSessionTest, TestSetRemoteSessionDescriptionWithCandidates) { |
| 2356 Init(); | 2358 Init(); |
| 2357 | 2359 |
| 2358 cricket::Candidate candidate1; | 2360 cricket::Candidate candidate1; |
| 2359 candidate1.set_component(1); | 2361 candidate1.set_component(1); |
| 2360 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0, | 2362 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0, |
| 2361 candidate1); | 2363 candidate1); |
| 2362 SendAudioVideoStream1(); | 2364 SendAudioVideoStream1(); |
| 2363 SessionDescriptionInterface* offer = CreateOffer(); | 2365 SessionDescriptionInterface* offer = CreateOffer(); |
| 2364 | 2366 |
| 2365 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); | 2367 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); |
| 2366 SetRemoteDescriptionWithoutError(offer); | 2368 SetRemoteDescriptionWithoutError(offer); |
| 2367 | 2369 |
| 2368 const SessionDescriptionInterface* remote_desc = | 2370 const SessionDescriptionInterface* remote_desc = |
| 2369 session_->remote_description(); | 2371 session_->remote_description(); |
| 2370 ASSERT_TRUE(remote_desc != NULL); | 2372 ASSERT_TRUE(remote_desc != nullptr); |
| 2371 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); | 2373 ASSERT_EQ(2u, remote_desc->number_of_mediasections()); |
| 2372 const IceCandidateCollection* candidates = | 2374 const IceCandidateCollection* candidates = |
| 2373 remote_desc->candidates(kMediaContentIndex0); | 2375 remote_desc->candidates(kMediaContentIndex0); |
| 2374 ASSERT_EQ(1u, candidates->count()); | 2376 ASSERT_EQ(1u, candidates->count()); |
| 2375 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); | 2377 EXPECT_EQ(kMediaContentIndex0, candidates->at(0)->sdp_mline_index()); |
| 2376 | 2378 |
| 2377 SessionDescriptionInterface* answer = CreateAnswer(); | 2379 SessionDescriptionInterface* answer = CreateAnswer(); |
| 2378 SetLocalDescriptionWithoutError(answer); | 2380 SetLocalDescriptionWithoutError(answer); |
| 2379 } | 2381 } |
| 2380 | 2382 |
| 2381 // Test that offers and answers contains ice candidates when Ice candidates have | 2383 // Test that offers and answers contains ice candidates when Ice candidates have |
| 2382 // been gathered. | 2384 // been gathered. |
| 2383 TEST_F(WebRtcSessionTest, TestSetLocalAndRemoteDescriptionWithCandidates) { | 2385 TEST_F(WebRtcSessionTest, TestSetLocalAndRemoteDescriptionWithCandidates) { |
| 2384 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); | 2386 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); |
| 2385 Init(); | 2387 Init(); |
| 2386 SendAudioVideoStream1(); | 2388 SendAudioVideoStream1(); |
| 2387 // Ice is started but candidates are not provided until SetLocalDescription | 2389 // Ice is started but candidates are not provided until SetLocalDescription |
| 2388 // is called. | 2390 // is called. |
| 2389 EXPECT_EQ(0u, observer_.mline_0_candidates_.size()); | 2391 EXPECT_EQ(0u, observer_.mline_0_candidates_.size()); |
| 2390 EXPECT_EQ(0u, observer_.mline_1_candidates_.size()); | 2392 EXPECT_EQ(0u, observer_.mline_1_candidates_.size()); |
| 2391 CreateAndSetRemoteOfferAndLocalAnswer(); | 2393 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2392 // Wait until at least one local candidate has been collected. | 2394 // Wait until at least one local candidate has been collected. |
| 2393 EXPECT_TRUE_WAIT(0u < observer_.mline_0_candidates_.size(), | 2395 EXPECT_TRUE_WAIT(0u < observer_.mline_0_candidates_.size(), |
| 2394 kIceCandidatesTimeout); | 2396 kIceCandidatesTimeout); |
| 2395 | 2397 |
| 2396 std::unique_ptr<SessionDescriptionInterface> local_offer(CreateOffer()); | 2398 std::unique_ptr<SessionDescriptionInterface> local_offer(CreateOffer()); |
| 2397 | 2399 |
| 2398 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex0) != NULL); | 2400 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex0) != nullptr); |
| 2399 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex0)->count()); | 2401 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex0)->count()); |
| 2400 | 2402 |
| 2401 SessionDescriptionInterface* remote_offer(CreateRemoteOffer()); | 2403 SessionDescriptionInterface* remote_offer(CreateRemoteOffer()); |
| 2402 SetRemoteDescriptionWithoutError(remote_offer); | 2404 SetRemoteDescriptionWithoutError(remote_offer); |
| 2403 SessionDescriptionInterface* answer = CreateAnswer(); | 2405 SessionDescriptionInterface* answer = CreateAnswer(); |
| 2404 ASSERT_TRUE(answer->candidates(kMediaContentIndex0) != NULL); | 2406 ASSERT_TRUE(answer->candidates(kMediaContentIndex0) != nullptr); |
| 2405 EXPECT_LT(0u, answer->candidates(kMediaContentIndex0)->count()); | 2407 EXPECT_LT(0u, answer->candidates(kMediaContentIndex0)->count()); |
| 2406 SetLocalDescriptionWithoutError(answer); | 2408 SetLocalDescriptionWithoutError(answer); |
| 2407 } | 2409 } |
| 2408 | 2410 |
| 2409 // Verifies TransportProxy and media channels are created with content names | 2411 // Verifies TransportProxy and media channels are created with content names |
| 2410 // present in the SessionDescription. | 2412 // present in the SessionDescription. |
| 2411 TEST_F(WebRtcSessionTest, TestChannelCreationsWithContentNames) { | 2413 TEST_F(WebRtcSessionTest, TestChannelCreationsWithContentNames) { |
| 2412 Init(); | 2414 Init(); |
| 2413 SendAudioVideoStream1(); | 2415 SendAudioVideoStream1(); |
| 2414 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 2416 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2430 kAudioMidReplaceStr.c_str(), | 2432 kAudioMidReplaceStr.c_str(), |
| 2431 kAudioMidReplaceStr.length(), | 2433 kAudioMidReplaceStr.length(), |
| 2432 &sdp); | 2434 &sdp); |
| 2433 // Replacing |video| with |video_content_name|. | 2435 // Replacing |video| with |video_content_name|. |
| 2434 rtc::replace_substrs(kVideoMid.c_str(), kVideoMid.length(), | 2436 rtc::replace_substrs(kVideoMid.c_str(), kVideoMid.length(), |
| 2435 kVideoMidReplaceStr.c_str(), | 2437 kVideoMidReplaceStr.c_str(), |
| 2436 kVideoMidReplaceStr.length(), | 2438 kVideoMidReplaceStr.length(), |
| 2437 &sdp); | 2439 &sdp); |
| 2438 | 2440 |
| 2439 SessionDescriptionInterface* modified_offer = | 2441 SessionDescriptionInterface* modified_offer = |
| 2440 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL); | 2442 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, nullptr); |
| 2441 | 2443 |
| 2442 SetRemoteDescriptionWithoutError(modified_offer); | 2444 SetRemoteDescriptionWithoutError(modified_offer); |
| 2443 | 2445 |
| 2444 SessionDescriptionInterface* answer = CreateAnswer(); | 2446 SessionDescriptionInterface* answer = CreateAnswer(); |
| 2445 SetLocalDescriptionWithoutError(answer); | 2447 SetLocalDescriptionWithoutError(answer); |
| 2446 | 2448 |
| 2447 rtc::PacketTransportInternal* voice_transport_channel = | 2449 rtc::PacketTransportInternal* voice_transport_channel = |
| 2448 session_->voice_rtp_transport_channel(); | 2450 session_->voice_rtp_transport_channel(); |
| 2449 EXPECT_TRUE(voice_transport_channel != NULL); | 2451 EXPECT_TRUE(voice_transport_channel != nullptr); |
| 2450 EXPECT_EQ(voice_transport_channel->debug_name(), | 2452 EXPECT_EQ(voice_transport_channel->debug_name(), |
| 2451 "audio_content_name " + | 2453 "audio_content_name " + |
| 2452 std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP)); | 2454 std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
| 2453 rtc::PacketTransportInternal* video_transport_channel = | 2455 rtc::PacketTransportInternal* video_transport_channel = |
| 2454 session_->video_rtp_transport_channel(); | 2456 session_->video_rtp_transport_channel(); |
| 2455 ASSERT_TRUE(video_transport_channel != NULL); | 2457 ASSERT_TRUE(video_transport_channel != nullptr); |
| 2456 EXPECT_EQ(video_transport_channel->debug_name(), | 2458 EXPECT_EQ(video_transport_channel->debug_name(), |
| 2457 "video_content_name " + | 2459 "video_content_name " + |
| 2458 std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP)); | 2460 std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
| 2459 EXPECT_TRUE((video_channel_ = media_engine_->GetVideoChannel(0)) != NULL); | 2461 EXPECT_TRUE((video_channel_ = media_engine_->GetVideoChannel(0)) != nullptr); |
| 2460 EXPECT_TRUE((voice_channel_ = media_engine_->GetVoiceChannel(0)) != NULL); | 2462 EXPECT_TRUE((voice_channel_ = media_engine_->GetVoiceChannel(0)) != nullptr); |
| 2461 } | 2463 } |
| 2462 | 2464 |
| 2463 // Test that an offer contains the correct media content descriptions based on | 2465 // Test that an offer contains the correct media content descriptions based on |
| 2464 // the send streams when no constraints have been set. | 2466 // the send streams when no constraints have been set. |
| 2465 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraintsOrStreams) { | 2467 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraintsOrStreams) { |
| 2466 Init(); | 2468 Init(); |
| 2467 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 2469 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 2468 | 2470 |
| 2469 ASSERT_TRUE(offer != NULL); | 2471 ASSERT_TRUE(offer != nullptr); |
| 2470 const cricket::ContentInfo* content = | 2472 const cricket::ContentInfo* content = |
| 2471 cricket::GetFirstAudioContent(offer->description()); | 2473 cricket::GetFirstAudioContent(offer->description()); |
| 2472 EXPECT_TRUE(content != NULL); | 2474 EXPECT_TRUE(content != nullptr); |
| 2473 content = cricket::GetFirstVideoContent(offer->description()); | 2475 content = cricket::GetFirstVideoContent(offer->description()); |
| 2474 EXPECT_TRUE(content == NULL); | 2476 EXPECT_TRUE(content == nullptr); |
| 2475 } | 2477 } |
| 2476 | 2478 |
| 2477 // Test that an offer contains the correct media content descriptions based on | 2479 // Test that an offer contains the correct media content descriptions based on |
| 2478 // the send streams when no constraints have been set. | 2480 // the send streams when no constraints have been set. |
| 2479 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraints) { | 2481 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraints) { |
| 2480 Init(); | 2482 Init(); |
| 2481 // Test Audio only offer. | 2483 // Test Audio only offer. |
| 2482 SendAudioOnlyStream2(); | 2484 SendAudioOnlyStream2(); |
| 2483 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 2485 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 2484 | 2486 |
| 2485 const cricket::ContentInfo* content = | 2487 const cricket::ContentInfo* content = |
| 2486 cricket::GetFirstAudioContent(offer->description()); | 2488 cricket::GetFirstAudioContent(offer->description()); |
| 2487 EXPECT_TRUE(content != NULL); | 2489 EXPECT_TRUE(content != nullptr); |
| 2488 content = cricket::GetFirstVideoContent(offer->description()); | 2490 content = cricket::GetFirstVideoContent(offer->description()); |
| 2489 EXPECT_TRUE(content == NULL); | 2491 EXPECT_TRUE(content == nullptr); |
| 2490 | 2492 |
| 2491 // Test Audio / Video offer. | 2493 // Test Audio / Video offer. |
| 2492 SendAudioVideoStream1(); | 2494 SendAudioVideoStream1(); |
| 2493 offer.reset(CreateOffer()); | 2495 offer.reset(CreateOffer()); |
| 2494 content = cricket::GetFirstAudioContent(offer->description()); | 2496 content = cricket::GetFirstAudioContent(offer->description()); |
| 2495 EXPECT_TRUE(content != NULL); | 2497 EXPECT_TRUE(content != nullptr); |
| 2496 content = cricket::GetFirstVideoContent(offer->description()); | 2498 content = cricket::GetFirstVideoContent(offer->description()); |
| 2497 EXPECT_TRUE(content != NULL); | 2499 EXPECT_TRUE(content != nullptr); |
| 2498 } | 2500 } |
| 2499 | 2501 |
| 2500 // Test that an offer contains no media content descriptions if | 2502 // Test that an offer contains no media content descriptions if |
| 2501 // kOfferToReceiveVideo and kOfferToReceiveAudio constraints are set to false. | 2503 // kOfferToReceiveVideo and kOfferToReceiveAudio constraints are set to false. |
| 2502 TEST_F(WebRtcSessionTest, CreateOfferWithConstraintsWithoutStreams) { | 2504 TEST_F(WebRtcSessionTest, CreateOfferWithConstraintsWithoutStreams) { |
| 2503 Init(); | 2505 Init(); |
| 2504 PeerConnectionInterface::RTCOfferAnswerOptions options; | 2506 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 2505 options.offer_to_receive_audio = 0; | 2507 options.offer_to_receive_audio = 0; |
| 2506 options.offer_to_receive_video = 0; | 2508 options.offer_to_receive_video = 0; |
| 2507 | 2509 |
| 2508 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); | 2510 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); |
| 2509 | 2511 |
| 2510 ASSERT_TRUE(offer != NULL); | 2512 ASSERT_TRUE(offer != nullptr); |
| 2511 const cricket::ContentInfo* content = | 2513 const cricket::ContentInfo* content = |
| 2512 cricket::GetFirstAudioContent(offer->description()); | 2514 cricket::GetFirstAudioContent(offer->description()); |
| 2513 EXPECT_TRUE(content == NULL); | 2515 EXPECT_TRUE(content == nullptr); |
| 2514 content = cricket::GetFirstVideoContent(offer->description()); | 2516 content = cricket::GetFirstVideoContent(offer->description()); |
| 2515 EXPECT_TRUE(content == NULL); | 2517 EXPECT_TRUE(content == nullptr); |
| 2516 } | 2518 } |
| 2517 | 2519 |
| 2518 // Test that an offer contains only audio media content descriptions if | 2520 // Test that an offer contains only audio media content descriptions if |
| 2519 // kOfferToReceiveAudio constraints are set to true. | 2521 // kOfferToReceiveAudio constraints are set to true. |
| 2520 TEST_F(WebRtcSessionTest, CreateAudioOnlyOfferWithConstraints) { | 2522 TEST_F(WebRtcSessionTest, CreateAudioOnlyOfferWithConstraints) { |
| 2521 Init(); | 2523 Init(); |
| 2522 PeerConnectionInterface::RTCOfferAnswerOptions options; | 2524 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 2523 options.offer_to_receive_audio = | 2525 options.offer_to_receive_audio = |
| 2524 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; | 2526 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; |
| 2525 | 2527 |
| 2526 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); | 2528 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); |
| 2527 | 2529 |
| 2528 const cricket::ContentInfo* content = | 2530 const cricket::ContentInfo* content = |
| 2529 cricket::GetFirstAudioContent(offer->description()); | 2531 cricket::GetFirstAudioContent(offer->description()); |
| 2530 EXPECT_TRUE(content != NULL); | 2532 EXPECT_TRUE(content != nullptr); |
| 2531 content = cricket::GetFirstVideoContent(offer->description()); | 2533 content = cricket::GetFirstVideoContent(offer->description()); |
| 2532 EXPECT_TRUE(content == NULL); | 2534 EXPECT_TRUE(content == nullptr); |
| 2533 } | 2535 } |
| 2534 | 2536 |
| 2535 // Test that an offer contains audio and video media content descriptions if | 2537 // Test that an offer contains audio and video media content descriptions if |
| 2536 // kOfferToReceiveAudio and kOfferToReceiveVideo constraints are set to true. | 2538 // kOfferToReceiveAudio and kOfferToReceiveVideo constraints are set to true. |
| 2537 TEST_F(WebRtcSessionTest, CreateOfferWithConstraints) { | 2539 TEST_F(WebRtcSessionTest, CreateOfferWithConstraints) { |
| 2538 Init(); | 2540 Init(); |
| 2539 // Test Audio / Video offer. | 2541 // Test Audio / Video offer. |
| 2540 PeerConnectionInterface::RTCOfferAnswerOptions options; | 2542 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 2541 options.offer_to_receive_audio = | 2543 options.offer_to_receive_audio = |
| 2542 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; | 2544 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; |
| 2543 options.offer_to_receive_video = | 2545 options.offer_to_receive_video = |
| 2544 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; | 2546 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; |
| 2545 | 2547 |
| 2546 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); | 2548 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); |
| 2547 | 2549 |
| 2548 const cricket::ContentInfo* content = | 2550 const cricket::ContentInfo* content = |
| 2549 cricket::GetFirstAudioContent(offer->description()); | 2551 cricket::GetFirstAudioContent(offer->description()); |
| 2550 EXPECT_TRUE(content != NULL); | 2552 EXPECT_TRUE(content != nullptr); |
| 2551 | 2553 |
| 2552 content = cricket::GetFirstVideoContent(offer->description()); | 2554 content = cricket::GetFirstVideoContent(offer->description()); |
| 2553 EXPECT_TRUE(content != NULL); | 2555 EXPECT_TRUE(content != nullptr); |
| 2554 | 2556 |
| 2555 // Sets constraints to false and verifies that audio/video contents are | 2557 // Sets constraints to false and verifies that audio/video contents are |
| 2556 // removed. | 2558 // removed. |
| 2557 options.offer_to_receive_audio = 0; | 2559 options.offer_to_receive_audio = 0; |
| 2558 options.offer_to_receive_video = 0; | 2560 options.offer_to_receive_video = 0; |
| 2559 offer.reset(CreateOffer(options)); | 2561 offer.reset(CreateOffer(options)); |
| 2560 | 2562 |
| 2561 content = cricket::GetFirstAudioContent(offer->description()); | 2563 content = cricket::GetFirstAudioContent(offer->description()); |
| 2562 EXPECT_TRUE(content == NULL); | 2564 EXPECT_TRUE(content == nullptr); |
| 2563 content = cricket::GetFirstVideoContent(offer->description()); | 2565 content = cricket::GetFirstVideoContent(offer->description()); |
| 2564 EXPECT_TRUE(content == NULL); | 2566 EXPECT_TRUE(content == nullptr); |
| 2565 } | 2567 } |
| 2566 | 2568 |
| 2567 // Test that an answer can not be created if the last remote description is not | 2569 // Test that an answer can not be created if the last remote description is not |
| 2568 // an offer. | 2570 // an offer. |
| 2569 TEST_F(WebRtcSessionTest, CreateAnswerWithoutAnOffer) { | 2571 TEST_F(WebRtcSessionTest, CreateAnswerWithoutAnOffer) { |
| 2570 Init(); | 2572 Init(); |
| 2571 SessionDescriptionInterface* offer = CreateOffer(); | 2573 SessionDescriptionInterface* offer = CreateOffer(); |
| 2572 SetLocalDescriptionWithoutError(offer); | 2574 SetLocalDescriptionWithoutError(offer); |
| 2573 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); | 2575 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); |
| 2574 SetRemoteDescriptionWithoutError(answer); | 2576 SetRemoteDescriptionWithoutError(answer); |
| 2575 EXPECT_TRUE(CreateAnswer() == NULL); | 2577 EXPECT_TRUE(CreateAnswer() == nullptr); |
| 2576 } | 2578 } |
| 2577 | 2579 |
| 2578 // Test that an answer contains the correct media content descriptions when no | 2580 // Test that an answer contains the correct media content descriptions when no |
| 2579 // constraints have been set. | 2581 // constraints have been set. |
| 2580 TEST_F(WebRtcSessionTest, CreateAnswerWithoutConstraintsOrStreams) { | 2582 TEST_F(WebRtcSessionTest, CreateAnswerWithoutConstraintsOrStreams) { |
| 2581 Init(); | 2583 Init(); |
| 2582 // Create a remote offer with audio and video content. | 2584 // Create a remote offer with audio and video content. |
| 2583 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); | 2585 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); |
| 2584 SetRemoteDescriptionWithoutError(offer.release()); | 2586 SetRemoteDescriptionWithoutError(offer.release()); |
| 2585 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 2587 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 2586 const cricket::ContentInfo* content = | 2588 const cricket::ContentInfo* content = |
| 2587 cricket::GetFirstAudioContent(answer->description()); | 2589 cricket::GetFirstAudioContent(answer->description()); |
| 2588 ASSERT_TRUE(content != NULL); | 2590 ASSERT_TRUE(content != nullptr); |
| 2589 EXPECT_FALSE(content->rejected); | 2591 EXPECT_FALSE(content->rejected); |
| 2590 | 2592 |
| 2591 content = cricket::GetFirstVideoContent(answer->description()); | 2593 content = cricket::GetFirstVideoContent(answer->description()); |
| 2592 ASSERT_TRUE(content != NULL); | 2594 ASSERT_TRUE(content != nullptr); |
| 2593 EXPECT_FALSE(content->rejected); | 2595 EXPECT_FALSE(content->rejected); |
| 2594 } | 2596 } |
| 2595 | 2597 |
| 2596 // Test that an answer contains the correct media content descriptions when no | 2598 // Test that an answer contains the correct media content descriptions when no |
| 2597 // constraints have been set and the offer only contain audio. | 2599 // constraints have been set and the offer only contain audio. |
| 2598 TEST_F(WebRtcSessionTest, CreateAudioAnswerWithoutConstraintsOrStreams) { | 2600 TEST_F(WebRtcSessionTest, CreateAudioAnswerWithoutConstraintsOrStreams) { |
| 2599 Init(); | 2601 Init(); |
| 2600 // Create a remote offer with audio only. | 2602 // Create a remote offer with audio only. |
| 2601 cricket::MediaSessionOptions options; | 2603 cricket::MediaSessionOptions options; |
| 2602 | 2604 |
| 2603 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); | 2605 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); |
| 2604 ASSERT_TRUE(cricket::GetFirstVideoContent(offer->description()) == NULL); | 2606 ASSERT_TRUE(cricket::GetFirstVideoContent(offer->description()) == nullptr); |
| 2605 ASSERT_TRUE(cricket::GetFirstAudioContent(offer->description()) != NULL); | 2607 ASSERT_TRUE(cricket::GetFirstAudioContent(offer->description()) != nullptr); |
| 2606 | 2608 |
| 2607 SetRemoteDescriptionWithoutError(offer.release()); | 2609 SetRemoteDescriptionWithoutError(offer.release()); |
| 2608 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 2610 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 2609 const cricket::ContentInfo* content = | 2611 const cricket::ContentInfo* content = |
| 2610 cricket::GetFirstAudioContent(answer->description()); | 2612 cricket::GetFirstAudioContent(answer->description()); |
| 2611 ASSERT_TRUE(content != NULL); | 2613 ASSERT_TRUE(content != nullptr); |
| 2612 EXPECT_FALSE(content->rejected); | 2614 EXPECT_FALSE(content->rejected); |
| 2613 | 2615 |
| 2614 EXPECT_TRUE(cricket::GetFirstVideoContent(answer->description()) == NULL); | 2616 EXPECT_TRUE(cricket::GetFirstVideoContent(answer->description()) == nullptr); |
| 2615 } | 2617 } |
| 2616 | 2618 |
| 2617 // Test that an answer contains the correct media content descriptions when no | 2619 // Test that an answer contains the correct media content descriptions when no |
| 2618 // constraints have been set. | 2620 // constraints have been set. |
| 2619 TEST_F(WebRtcSessionTest, CreateAnswerWithoutConstraints) { | 2621 TEST_F(WebRtcSessionTest, CreateAnswerWithoutConstraints) { |
| 2620 Init(); | 2622 Init(); |
| 2621 // Create a remote offer with audio and video content. | 2623 // Create a remote offer with audio and video content. |
| 2622 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); | 2624 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); |
| 2623 SetRemoteDescriptionWithoutError(offer.release()); | 2625 SetRemoteDescriptionWithoutError(offer.release()); |
| 2624 // Test with a stream with tracks. | 2626 // Test with a stream with tracks. |
| 2625 SendAudioVideoStream1(); | 2627 SendAudioVideoStream1(); |
| 2626 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 2628 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 2627 const cricket::ContentInfo* content = | 2629 const cricket::ContentInfo* content = |
| 2628 cricket::GetFirstAudioContent(answer->description()); | 2630 cricket::GetFirstAudioContent(answer->description()); |
| 2629 ASSERT_TRUE(content != NULL); | 2631 ASSERT_TRUE(content != nullptr); |
| 2630 EXPECT_FALSE(content->rejected); | 2632 EXPECT_FALSE(content->rejected); |
| 2631 | 2633 |
| 2632 content = cricket::GetFirstVideoContent(answer->description()); | 2634 content = cricket::GetFirstVideoContent(answer->description()); |
| 2633 ASSERT_TRUE(content != NULL); | 2635 ASSERT_TRUE(content != nullptr); |
| 2634 EXPECT_FALSE(content->rejected); | 2636 EXPECT_FALSE(content->rejected); |
| 2635 } | 2637 } |
| 2636 | 2638 |
| 2637 // Test that an answer contains the correct media content descriptions when | 2639 // Test that an answer contains the correct media content descriptions when |
| 2638 // constraints have been set but no stream is sent. | 2640 // constraints have been set but no stream is sent. |
| 2639 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraintsWithoutStreams) { | 2641 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraintsWithoutStreams) { |
| 2640 Init(); | 2642 Init(); |
| 2641 // Create a remote offer with audio and video content. | 2643 // Create a remote offer with audio and video content. |
| 2642 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); | 2644 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); |
| 2643 SetRemoteDescriptionWithoutError(offer.release()); | 2645 SetRemoteDescriptionWithoutError(offer.release()); |
| 2644 | 2646 |
| 2645 cricket::MediaSessionOptions session_options; | 2647 cricket::MediaSessionOptions session_options; |
| 2646 session_options.recv_audio = false; | 2648 session_options.recv_audio = false; |
| 2647 session_options.recv_video = false; | 2649 session_options.recv_video = false; |
| 2648 std::unique_ptr<SessionDescriptionInterface> answer( | 2650 std::unique_ptr<SessionDescriptionInterface> answer( |
| 2649 CreateAnswer(session_options)); | 2651 CreateAnswer(session_options)); |
| 2650 | 2652 |
| 2651 const cricket::ContentInfo* content = | 2653 const cricket::ContentInfo* content = |
| 2652 cricket::GetFirstAudioContent(answer->description()); | 2654 cricket::GetFirstAudioContent(answer->description()); |
| 2653 ASSERT_TRUE(content != NULL); | 2655 ASSERT_TRUE(content != nullptr); |
| 2654 EXPECT_TRUE(content->rejected); | 2656 EXPECT_TRUE(content->rejected); |
| 2655 | 2657 |
| 2656 content = cricket::GetFirstVideoContent(answer->description()); | 2658 content = cricket::GetFirstVideoContent(answer->description()); |
| 2657 ASSERT_TRUE(content != NULL); | 2659 ASSERT_TRUE(content != nullptr); |
| 2658 EXPECT_TRUE(content->rejected); | 2660 EXPECT_TRUE(content->rejected); |
| 2659 } | 2661 } |
| 2660 | 2662 |
| 2661 // Test that an answer contains the correct media content descriptions when | 2663 // Test that an answer contains the correct media content descriptions when |
| 2662 // constraints have been set and streams are sent. | 2664 // constraints have been set and streams are sent. |
| 2663 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraints) { | 2665 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraints) { |
| 2664 Init(); | 2666 Init(); |
| 2665 // Create a remote offer with audio and video content. | 2667 // Create a remote offer with audio and video content. |
| 2666 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); | 2668 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); |
| 2667 SetRemoteDescriptionWithoutError(offer.release()); | 2669 SetRemoteDescriptionWithoutError(offer.release()); |
| 2668 | 2670 |
| 2669 cricket::MediaSessionOptions options; | 2671 cricket::MediaSessionOptions options; |
| 2670 options.recv_audio = false; | 2672 options.recv_audio = false; |
| 2671 options.recv_video = false; | 2673 options.recv_video = false; |
| 2672 | 2674 |
| 2673 // Test with a stream with tracks. | 2675 // Test with a stream with tracks. |
| 2674 SendAudioVideoStream1(); | 2676 SendAudioVideoStream1(); |
| 2675 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer(options)); | 2677 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer(options)); |
| 2676 | 2678 |
| 2677 // TODO(perkj): Should the direction be set to SEND_ONLY? | 2679 // TODO(perkj): Should the direction be set to SEND_ONLY? |
| 2678 const cricket::ContentInfo* content = | 2680 const cricket::ContentInfo* content = |
| 2679 cricket::GetFirstAudioContent(answer->description()); | 2681 cricket::GetFirstAudioContent(answer->description()); |
| 2680 ASSERT_TRUE(content != NULL); | 2682 ASSERT_TRUE(content != nullptr); |
| 2681 EXPECT_FALSE(content->rejected); | 2683 EXPECT_FALSE(content->rejected); |
| 2682 | 2684 |
| 2683 // TODO(perkj): Should the direction be set to SEND_ONLY? | 2685 // TODO(perkj): Should the direction be set to SEND_ONLY? |
| 2684 content = cricket::GetFirstVideoContent(answer->description()); | 2686 content = cricket::GetFirstVideoContent(answer->description()); |
| 2685 ASSERT_TRUE(content != NULL); | 2687 ASSERT_TRUE(content != nullptr); |
| 2686 EXPECT_FALSE(content->rejected); | 2688 EXPECT_FALSE(content->rejected); |
| 2687 } | 2689 } |
| 2688 | 2690 |
| 2689 TEST_F(WebRtcSessionTest, CreateOfferWithoutCNCodecs) { | 2691 TEST_F(WebRtcSessionTest, CreateOfferWithoutCNCodecs) { |
| 2690 AddCNCodecs(); | 2692 AddCNCodecs(); |
| 2691 Init(); | 2693 Init(); |
| 2692 PeerConnectionInterface::RTCOfferAnswerOptions options; | 2694 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 2693 options.offer_to_receive_audio = | 2695 options.offer_to_receive_audio = |
| 2694 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; | 2696 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; |
| 2695 options.voice_activity_detection = false; | 2697 options.voice_activity_detection = false; |
| 2696 | 2698 |
| 2697 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); | 2699 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); |
| 2698 | 2700 |
| 2699 const cricket::ContentInfo* content = | 2701 const cricket::ContentInfo* content = |
| 2700 cricket::GetFirstAudioContent(offer->description()); | 2702 cricket::GetFirstAudioContent(offer->description()); |
| 2701 EXPECT_TRUE(content != NULL); | 2703 EXPECT_TRUE(content != nullptr); |
| 2702 EXPECT_TRUE(VerifyNoCNCodecs(content)); | 2704 EXPECT_TRUE(VerifyNoCNCodecs(content)); |
| 2703 } | 2705 } |
| 2704 | 2706 |
| 2705 TEST_F(WebRtcSessionTest, CreateAnswerWithoutCNCodecs) { | 2707 TEST_F(WebRtcSessionTest, CreateAnswerWithoutCNCodecs) { |
| 2706 AddCNCodecs(); | 2708 AddCNCodecs(); |
| 2707 Init(); | 2709 Init(); |
| 2708 // Create a remote offer with audio and video content. | 2710 // Create a remote offer with audio and video content. |
| 2709 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); | 2711 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); |
| 2710 SetRemoteDescriptionWithoutError(offer.release()); | 2712 SetRemoteDescriptionWithoutError(offer.release()); |
| 2711 | 2713 |
| 2712 cricket::MediaSessionOptions options; | 2714 cricket::MediaSessionOptions options; |
| 2713 options.vad_enabled = false; | 2715 options.vad_enabled = false; |
| 2714 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer(options)); | 2716 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer(options)); |
| 2715 const cricket::ContentInfo* content = | 2717 const cricket::ContentInfo* content = |
| 2716 cricket::GetFirstAudioContent(answer->description()); | 2718 cricket::GetFirstAudioContent(answer->description()); |
| 2717 ASSERT_TRUE(content != NULL); | 2719 ASSERT_TRUE(content != nullptr); |
| 2718 EXPECT_TRUE(VerifyNoCNCodecs(content)); | 2720 EXPECT_TRUE(VerifyNoCNCodecs(content)); |
| 2719 } | 2721 } |
| 2720 | 2722 |
| 2721 // This test verifies the call setup when remote answer with audio only and | 2723 // This test verifies the call setup when remote answer with audio only and |
| 2722 // later updates with video. | 2724 // later updates with video. |
| 2723 TEST_F(WebRtcSessionTest, TestAVOfferWithAudioOnlyAnswer) { | 2725 TEST_F(WebRtcSessionTest, TestAVOfferWithAudioOnlyAnswer) { |
| 2724 Init(); | 2726 Init(); |
| 2725 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == NULL); | 2727 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == nullptr); |
| 2726 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == NULL); | 2728 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == nullptr); |
| 2727 | 2729 |
| 2728 SendAudioVideoStream1(); | 2730 SendAudioVideoStream1(); |
| 2729 SessionDescriptionInterface* offer = CreateOffer(); | 2731 SessionDescriptionInterface* offer = CreateOffer(); |
| 2730 | 2732 |
| 2731 cricket::MediaSessionOptions options; | 2733 cricket::MediaSessionOptions options; |
| 2732 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer, options); | 2734 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer, options); |
| 2733 | 2735 |
| 2734 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer | 2736 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer |
| 2735 // and answer; | 2737 // and answer; |
| 2736 SetLocalDescriptionWithoutError(offer); | 2738 SetLocalDescriptionWithoutError(offer); |
| 2737 SetRemoteDescriptionWithoutError(answer); | 2739 SetRemoteDescriptionWithoutError(answer); |
| 2738 | 2740 |
| 2739 video_channel_ = media_engine_->GetVideoChannel(0); | 2741 video_channel_ = media_engine_->GetVideoChannel(0); |
| 2740 voice_channel_ = media_engine_->GetVoiceChannel(0); | 2742 voice_channel_ = media_engine_->GetVoiceChannel(0); |
| 2741 | 2743 |
| 2742 ASSERT_TRUE(video_channel_ == NULL); | 2744 ASSERT_TRUE(video_channel_ == nullptr); |
| 2743 | 2745 |
| 2744 ASSERT_EQ(0u, voice_channel_->recv_streams().size()); | 2746 ASSERT_EQ(0u, voice_channel_->recv_streams().size()); |
| 2745 ASSERT_EQ(1u, voice_channel_->send_streams().size()); | 2747 ASSERT_EQ(1u, voice_channel_->send_streams().size()); |
| 2746 EXPECT_EQ(kAudioTrack1, voice_channel_->send_streams()[0].id); | 2748 EXPECT_EQ(kAudioTrack1, voice_channel_->send_streams()[0].id); |
| 2747 | 2749 |
| 2748 // Let the remote end update the session descriptions, with Audio and Video. | 2750 // Let the remote end update the session descriptions, with Audio and Video. |
| 2749 SendAudioVideoStream2(); | 2751 SendAudioVideoStream2(); |
| 2750 CreateAndSetRemoteOfferAndLocalAnswer(); | 2752 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2751 | 2753 |
| 2752 video_channel_ = media_engine_->GetVideoChannel(0); | 2754 video_channel_ = media_engine_->GetVideoChannel(0); |
| 2753 voice_channel_ = media_engine_->GetVoiceChannel(0); | 2755 voice_channel_ = media_engine_->GetVoiceChannel(0); |
| 2754 | 2756 |
| 2755 ASSERT_TRUE(video_channel_ != NULL); | 2757 ASSERT_TRUE(video_channel_ != nullptr); |
| 2756 ASSERT_TRUE(voice_channel_ != NULL); | 2758 ASSERT_TRUE(voice_channel_ != nullptr); |
| 2757 | 2759 |
| 2758 ASSERT_EQ(1u, video_channel_->recv_streams().size()); | 2760 ASSERT_EQ(1u, video_channel_->recv_streams().size()); |
| 2759 ASSERT_EQ(1u, video_channel_->send_streams().size()); | 2761 ASSERT_EQ(1u, video_channel_->send_streams().size()); |
| 2760 EXPECT_EQ(kVideoTrack2, video_channel_->recv_streams()[0].id); | 2762 EXPECT_EQ(kVideoTrack2, video_channel_->recv_streams()[0].id); |
| 2761 EXPECT_EQ(kVideoTrack2, video_channel_->send_streams()[0].id); | 2763 EXPECT_EQ(kVideoTrack2, video_channel_->send_streams()[0].id); |
| 2762 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); | 2764 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); |
| 2763 ASSERT_EQ(1u, voice_channel_->send_streams().size()); | 2765 ASSERT_EQ(1u, voice_channel_->send_streams().size()); |
| 2764 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); | 2766 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); |
| 2765 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); | 2767 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); |
| 2766 | 2768 |
| 2767 // Change session back to audio only. | 2769 // Change session back to audio only. |
| 2768 SendAudioOnlyStream2(); | 2770 SendAudioOnlyStream2(); |
| 2769 CreateAndSetRemoteOfferAndLocalAnswer(); | 2771 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2770 | 2772 |
| 2771 EXPECT_EQ(0u, video_channel_->recv_streams().size()); | 2773 EXPECT_EQ(0u, video_channel_->recv_streams().size()); |
| 2772 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); | 2774 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); |
| 2773 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); | 2775 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); |
| 2774 ASSERT_EQ(1u, voice_channel_->send_streams().size()); | 2776 ASSERT_EQ(1u, voice_channel_->send_streams().size()); |
| 2775 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); | 2777 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); |
| 2776 } | 2778 } |
| 2777 | 2779 |
| 2778 // This test verifies the call setup when remote answer with video only and | 2780 // This test verifies the call setup when remote answer with video only and |
| 2779 // later updates with audio. | 2781 // later updates with audio. |
| 2780 TEST_F(WebRtcSessionTest, TestAVOfferWithVideoOnlyAnswer) { | 2782 TEST_F(WebRtcSessionTest, TestAVOfferWithVideoOnlyAnswer) { |
| 2781 Init(); | 2783 Init(); |
| 2782 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == NULL); | 2784 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == nullptr); |
| 2783 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == NULL); | 2785 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == nullptr); |
| 2784 SendAudioVideoStream1(); | 2786 SendAudioVideoStream1(); |
| 2785 SessionDescriptionInterface* offer = CreateOffer(); | 2787 SessionDescriptionInterface* offer = CreateOffer(); |
| 2786 | 2788 |
| 2787 cricket::MediaSessionOptions options; | 2789 cricket::MediaSessionOptions options; |
| 2788 options.recv_audio = false; | 2790 options.recv_audio = false; |
| 2789 options.recv_video = true; | 2791 options.recv_video = true; |
| 2790 SessionDescriptionInterface* answer = CreateRemoteAnswer( | 2792 SessionDescriptionInterface* answer = CreateRemoteAnswer( |
| 2791 offer, options, cricket::SEC_ENABLED); | 2793 offer, options, cricket::SEC_ENABLED); |
| 2792 | 2794 |
| 2793 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer | 2795 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer |
| 2794 // and answer. | 2796 // and answer. |
| 2795 SetLocalDescriptionWithoutError(offer); | 2797 SetLocalDescriptionWithoutError(offer); |
| 2796 SetRemoteDescriptionWithoutError(answer); | 2798 SetRemoteDescriptionWithoutError(answer); |
| 2797 | 2799 |
| 2798 video_channel_ = media_engine_->GetVideoChannel(0); | 2800 video_channel_ = media_engine_->GetVideoChannel(0); |
| 2799 voice_channel_ = media_engine_->GetVoiceChannel(0); | 2801 voice_channel_ = media_engine_->GetVoiceChannel(0); |
| 2800 | 2802 |
| 2801 ASSERT_TRUE(voice_channel_ == NULL); | 2803 ASSERT_TRUE(voice_channel_ == nullptr); |
| 2802 ASSERT_TRUE(video_channel_ != NULL); | 2804 ASSERT_TRUE(video_channel_ != nullptr); |
| 2803 | 2805 |
| 2804 EXPECT_EQ(0u, video_channel_->recv_streams().size()); | 2806 EXPECT_EQ(0u, video_channel_->recv_streams().size()); |
| 2805 ASSERT_EQ(1u, video_channel_->send_streams().size()); | 2807 ASSERT_EQ(1u, video_channel_->send_streams().size()); |
| 2806 EXPECT_EQ(kVideoTrack1, video_channel_->send_streams()[0].id); | 2808 EXPECT_EQ(kVideoTrack1, video_channel_->send_streams()[0].id); |
| 2807 | 2809 |
| 2808 // Update the session descriptions, with Audio and Video. | 2810 // Update the session descriptions, with Audio and Video. |
| 2809 SendAudioVideoStream2(); | 2811 SendAudioVideoStream2(); |
| 2810 CreateAndSetRemoteOfferAndLocalAnswer(); | 2812 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2811 | 2813 |
| 2812 voice_channel_ = media_engine_->GetVoiceChannel(0); | 2814 voice_channel_ = media_engine_->GetVoiceChannel(0); |
| 2813 ASSERT_TRUE(voice_channel_ != NULL); | 2815 ASSERT_TRUE(voice_channel_ != nullptr); |
| 2814 | 2816 |
| 2815 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); | 2817 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); |
| 2816 ASSERT_EQ(1u, voice_channel_->send_streams().size()); | 2818 ASSERT_EQ(1u, voice_channel_->send_streams().size()); |
| 2817 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); | 2819 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); |
| 2818 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); | 2820 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); |
| 2819 | 2821 |
| 2820 // Change session back to video only. | 2822 // Change session back to video only. |
| 2821 SendVideoOnlyStream2(); | 2823 SendVideoOnlyStream2(); |
| 2822 CreateAndSetRemoteOfferAndLocalAnswer(); | 2824 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 2823 | 2825 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2871 // This test verifies that setLocalDescription fails if | 2873 // This test verifies that setLocalDescription fails if |
| 2872 // no a=ice-ufrag and a=ice-pwd lines are present in the SDP. | 2874 // no a=ice-ufrag and a=ice-pwd lines are present in the SDP. |
| 2873 TEST_F(WebRtcSessionTest, TestSetLocalDescriptionWithoutIce) { | 2875 TEST_F(WebRtcSessionTest, TestSetLocalDescriptionWithoutIce) { |
| 2874 Init(); | 2876 Init(); |
| 2875 SendAudioVideoStream1(); | 2877 SendAudioVideoStream1(); |
| 2876 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 2878 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 2877 | 2879 |
| 2878 std::string sdp; | 2880 std::string sdp; |
| 2879 RemoveIceUfragPwdLines(offer.get(), &sdp); | 2881 RemoveIceUfragPwdLines(offer.get(), &sdp); |
| 2880 SessionDescriptionInterface* modified_offer = | 2882 SessionDescriptionInterface* modified_offer = |
| 2881 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL); | 2883 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, nullptr); |
| 2882 SetLocalDescriptionOfferExpectError(kSdpWithoutIceUfragPwd, modified_offer); | 2884 SetLocalDescriptionOfferExpectError(kSdpWithoutIceUfragPwd, modified_offer); |
| 2883 } | 2885 } |
| 2884 | 2886 |
| 2885 // This test verifies that setRemoteDescription fails if | 2887 // This test verifies that setRemoteDescription fails if |
| 2886 // no a=ice-ufrag and a=ice-pwd lines are present in the SDP. | 2888 // no a=ice-ufrag and a=ice-pwd lines are present in the SDP. |
| 2887 TEST_F(WebRtcSessionTest, TestSetRemoteDescriptionWithoutIce) { | 2889 TEST_F(WebRtcSessionTest, TestSetRemoteDescriptionWithoutIce) { |
| 2888 Init(); | 2890 Init(); |
| 2889 std::unique_ptr<SessionDescriptionInterface> offer(CreateRemoteOffer()); | 2891 std::unique_ptr<SessionDescriptionInterface> offer(CreateRemoteOffer()); |
| 2890 std::string sdp; | 2892 std::string sdp; |
| 2891 RemoveIceUfragPwdLines(offer.get(), &sdp); | 2893 RemoveIceUfragPwdLines(offer.get(), &sdp); |
| 2892 SessionDescriptionInterface* modified_offer = | 2894 SessionDescriptionInterface* modified_offer = |
| 2893 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL); | 2895 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, nullptr); |
| 2894 SetRemoteDescriptionOfferExpectError(kSdpWithoutIceUfragPwd, modified_offer); | 2896 SetRemoteDescriptionOfferExpectError(kSdpWithoutIceUfragPwd, modified_offer); |
| 2895 } | 2897 } |
| 2896 | 2898 |
| 2897 // This test verifies that setLocalDescription fails if local offer has | 2899 // This test verifies that setLocalDescription fails if local offer has |
| 2898 // too short ice ufrag and pwd strings. | 2900 // too short ice ufrag and pwd strings. |
| 2899 TEST_F(WebRtcSessionTest, TestSetLocalDescriptionInvalidIceCredentials) { | 2901 TEST_F(WebRtcSessionTest, TestSetLocalDescriptionInvalidIceCredentials) { |
| 2900 Init(); | 2902 Init(); |
| 2901 SendAudioVideoStream1(); | 2903 SendAudioVideoStream1(); |
| 2902 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 2904 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 2903 // Modifying ice ufrag and pwd in local offer with strings smaller than the | 2905 // Modifying ice ufrag and pwd in local offer with strings smaller than the |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3034 SessionDescriptionInterface* offer = CreateRemoteOffer(); | 3036 SessionDescriptionInterface* offer = CreateRemoteOffer(); |
| 3035 SetRemoteDescriptionWithoutError(offer); | 3037 SetRemoteDescriptionWithoutError(offer); |
| 3036 | 3038 |
| 3037 SessionDescriptionInterface* answer = CreateAnswer(); | 3039 SessionDescriptionInterface* answer = CreateAnswer(); |
| 3038 SetLocalDescriptionWithoutError(answer); | 3040 SetLocalDescriptionWithoutError(answer); |
| 3039 | 3041 |
| 3040 EXPECT_EQ(session_->voice_rtp_transport_channel(), | 3042 EXPECT_EQ(session_->voice_rtp_transport_channel(), |
| 3041 session_->video_rtp_transport_channel()); | 3043 session_->video_rtp_transport_channel()); |
| 3042 | 3044 |
| 3043 cricket::BaseChannel* voice_channel = session_->voice_channel(); | 3045 cricket::BaseChannel* voice_channel = session_->voice_channel(); |
| 3044 ASSERT_TRUE(voice_channel != NULL); | 3046 ASSERT_TRUE(voice_channel != nullptr); |
| 3045 | 3047 |
| 3046 // Checks if one of the transport channels contains a connection using a given | 3048 // Checks if one of the transport channels contains a connection using a given |
| 3047 // port. | 3049 // port. |
| 3048 auto connection_with_remote_port = [this, voice_channel](int port) { | 3050 auto connection_with_remote_port = [this, voice_channel](int port) { |
| 3049 std::unique_ptr<webrtc::SessionStats> stats = session_->GetStats_s(); | 3051 std::unique_ptr<webrtc::SessionStats> stats = session_->GetStats_s(); |
| 3050 for (auto& kv : stats->transport_stats) { | 3052 for (auto& kv : stats->transport_stats) { |
| 3051 for (auto& chan_stat : kv.second.channel_stats) { | 3053 for (auto& chan_stat : kv.second.channel_stats) { |
| 3052 for (auto& conn_info : chan_stat.connection_infos) { | 3054 for (auto& conn_info : chan_stat.connection_infos) { |
| 3053 if (conn_info.remote_candidate.address().port() == port) { | 3055 if (conn_info.remote_candidate.address().port() == port) { |
| 3054 return true; | 3056 return true; |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3368 // Negotiate an audio channel with MAX_BUNDLE enabled. | 3370 // Negotiate an audio channel with MAX_BUNDLE enabled. |
| 3369 SendAudioOnlyStream2(); | 3371 SendAudioOnlyStream2(); |
| 3370 SessionDescriptionInterface* offer = CreateOffer(); | 3372 SessionDescriptionInterface* offer = CreateOffer(); |
| 3371 SetLocalDescriptionWithoutError(offer); | 3373 SetLocalDescriptionWithoutError(offer); |
| 3372 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringComplete, | 3374 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceGatheringComplete, |
| 3373 observer_.ice_gathering_state_, kIceCandidatesTimeout); | 3375 observer_.ice_gathering_state_, kIceCandidatesTimeout); |
| 3374 std::string sdp; | 3376 std::string sdp; |
| 3375 offer->ToString(&sdp); | 3377 offer->ToString(&sdp); |
| 3376 SessionDescriptionInterface* answer = webrtc::CreateSessionDescription( | 3378 SessionDescriptionInterface* answer = webrtc::CreateSessionDescription( |
| 3377 JsepSessionDescription::kAnswer, sdp, nullptr); | 3379 JsepSessionDescription::kAnswer, sdp, nullptr); |
| 3378 ASSERT_TRUE(answer != NULL); | 3380 ASSERT_TRUE(answer != nullptr); |
| 3379 SetRemoteDescriptionWithoutError(answer); | 3381 SetRemoteDescriptionWithoutError(answer); |
| 3380 | 3382 |
| 3381 // Wait for the ICE state to stabilize. | 3383 // Wait for the ICE state to stabilize. |
| 3382 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, | 3384 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, |
| 3383 observer_.ice_connection_state_, kIceCandidatesTimeout); | 3385 observer_.ice_connection_state_, kIceCandidatesTimeout); |
| 3384 observer_.ice_connection_state_history_.clear(); | 3386 observer_.ice_connection_state_history_.clear(); |
| 3385 | 3387 |
| 3386 // Now add a video channel which should be using the same bundle transport. | 3388 // Now add a video channel which should be using the same bundle transport. |
| 3387 SendAudioVideoStream2(); | 3389 SendAudioVideoStream2(); |
| 3388 offer = CreateOffer(); | 3390 offer = CreateOffer(); |
| 3389 offer->ToString(&sdp); | 3391 offer->ToString(&sdp); |
| 3390 SetLocalDescriptionWithoutError(offer); | 3392 SetLocalDescriptionWithoutError(offer); |
| 3391 answer = webrtc::CreateSessionDescription(JsepSessionDescription::kAnswer, | 3393 answer = webrtc::CreateSessionDescription(JsepSessionDescription::kAnswer, |
| 3392 sdp, nullptr); | 3394 sdp, nullptr); |
| 3393 ASSERT_TRUE(answer != NULL); | 3395 ASSERT_TRUE(answer != nullptr); |
| 3394 SetRemoteDescriptionWithoutError(answer); | 3396 SetRemoteDescriptionWithoutError(answer); |
| 3395 | 3397 |
| 3396 // Wait for ICE state to stabilize | 3398 // Wait for ICE state to stabilize |
| 3397 rtc::Thread::Current()->ProcessMessages(0); | 3399 rtc::Thread::Current()->ProcessMessages(0); |
| 3398 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, | 3400 EXPECT_EQ_WAIT(PeerConnectionInterface::kIceConnectionCompleted, |
| 3399 observer_.ice_connection_state_, kIceCandidatesTimeout); | 3401 observer_.ice_connection_state_, kIceCandidatesTimeout); |
| 3400 | 3402 |
| 3401 // No ICE state changes are expected to happen. | 3403 // No ICE state changes are expected to happen. |
| 3402 EXPECT_EQ(0, observer_.ice_connection_state_history_.size()); | 3404 EXPECT_EQ(0, observer_.ice_connection_state_history_.size()); |
| 3403 } | 3405 } |
| 3404 | 3406 |
| 3405 TEST_F(WebRtcSessionTest, TestRequireRtcpMux) { | 3407 TEST_F(WebRtcSessionTest, TestRequireRtcpMux) { |
| 3406 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyRequire); | 3408 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyRequire); |
| 3407 SendAudioVideoStream1(); | 3409 SendAudioVideoStream1(); |
| 3408 | 3410 |
| 3409 PeerConnectionInterface::RTCOfferAnswerOptions options; | 3411 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 3410 SessionDescriptionInterface* offer = CreateOffer(options); | 3412 SessionDescriptionInterface* offer = CreateOffer(options); |
| 3411 SetLocalDescriptionWithoutError(offer); | 3413 SetLocalDescriptionWithoutError(offer); |
| 3412 | 3414 |
| 3413 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == NULL); | 3415 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == nullptr); |
| 3414 EXPECT_TRUE(session_->video_rtcp_transport_channel() == NULL); | 3416 EXPECT_TRUE(session_->video_rtcp_transport_channel() == nullptr); |
| 3415 | 3417 |
| 3416 SendAudioVideoStream2(); | 3418 SendAudioVideoStream2(); |
| 3417 SessionDescriptionInterface* answer = | 3419 SessionDescriptionInterface* answer = |
| 3418 CreateRemoteAnswer(session_->local_description()); | 3420 CreateRemoteAnswer(session_->local_description()); |
| 3419 SetRemoteDescriptionWithoutError(answer); | 3421 SetRemoteDescriptionWithoutError(answer); |
| 3420 | 3422 |
| 3421 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == NULL); | 3423 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == nullptr); |
| 3422 EXPECT_TRUE(session_->video_rtcp_transport_channel() == NULL); | 3424 EXPECT_TRUE(session_->video_rtcp_transport_channel() == nullptr); |
| 3423 } | 3425 } |
| 3424 | 3426 |
| 3425 TEST_F(WebRtcSessionTest, TestNegotiateRtcpMux) { | 3427 TEST_F(WebRtcSessionTest, TestNegotiateRtcpMux) { |
| 3426 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyNegotiate); | 3428 InitWithRtcpMuxPolicy(PeerConnectionInterface::kRtcpMuxPolicyNegotiate); |
| 3427 SendAudioVideoStream1(); | 3429 SendAudioVideoStream1(); |
| 3428 | 3430 |
| 3429 PeerConnectionInterface::RTCOfferAnswerOptions options; | 3431 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 3430 SessionDescriptionInterface* offer = CreateOffer(options); | 3432 SessionDescriptionInterface* offer = CreateOffer(options); |
| 3431 SetLocalDescriptionWithoutError(offer); | 3433 SetLocalDescriptionWithoutError(offer); |
| 3432 | 3434 |
| 3433 EXPECT_TRUE(session_->voice_rtcp_transport_channel() != NULL); | 3435 EXPECT_TRUE(session_->voice_rtcp_transport_channel() != nullptr); |
| 3434 EXPECT_TRUE(session_->video_rtcp_transport_channel() != NULL); | 3436 EXPECT_TRUE(session_->video_rtcp_transport_channel() != nullptr); |
| 3435 | 3437 |
| 3436 SendAudioVideoStream2(); | 3438 SendAudioVideoStream2(); |
| 3437 SessionDescriptionInterface* answer = | 3439 SessionDescriptionInterface* answer = |
| 3438 CreateRemoteAnswer(session_->local_description()); | 3440 CreateRemoteAnswer(session_->local_description()); |
| 3439 SetRemoteDescriptionWithoutError(answer); | 3441 SetRemoteDescriptionWithoutError(answer); |
| 3440 | 3442 |
| 3441 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == NULL); | 3443 EXPECT_TRUE(session_->voice_rtcp_transport_channel() == nullptr); |
| 3442 EXPECT_TRUE(session_->video_rtcp_transport_channel() == NULL); | 3444 EXPECT_TRUE(session_->video_rtcp_transport_channel() == nullptr); |
| 3443 } | 3445 } |
| 3444 | 3446 |
| 3445 // This test verifies that SetLocalDescription and SetRemoteDescription fails | 3447 // This test verifies that SetLocalDescription and SetRemoteDescription fails |
| 3446 // if BUNDLE is enabled but rtcp-mux is disabled in m-lines. | 3448 // if BUNDLE is enabled but rtcp-mux is disabled in m-lines. |
| 3447 TEST_F(WebRtcSessionTest, TestDisabledRtcpMuxWithBundleEnabled) { | 3449 TEST_F(WebRtcSessionTest, TestDisabledRtcpMuxWithBundleEnabled) { |
| 3448 Init(); | 3450 Init(); |
| 3449 SendAudioVideoStream1(); | 3451 SendAudioVideoStream1(); |
| 3450 | 3452 |
| 3451 PeerConnectionInterface::RTCOfferAnswerOptions options; | 3453 PeerConnectionInterface::RTCOfferAnswerOptions options; |
| 3452 options.use_rtp_mux = true; | 3454 options.use_rtp_mux = true; |
| 3453 | 3455 |
| 3454 SessionDescriptionInterface* offer = CreateOffer(options); | 3456 SessionDescriptionInterface* offer = CreateOffer(options); |
| 3455 std::string offer_str; | 3457 std::string offer_str; |
| 3456 offer->ToString(&offer_str); | 3458 offer->ToString(&offer_str); |
| 3457 // Disable rtcp-mux | 3459 // Disable rtcp-mux |
| 3458 const std::string rtcp_mux = "rtcp-mux"; | 3460 const std::string rtcp_mux = "rtcp-mux"; |
| 3459 const std::string xrtcp_mux = "xrtcp-mux"; | 3461 const std::string xrtcp_mux = "xrtcp-mux"; |
| 3460 rtc::replace_substrs(rtcp_mux.c_str(), rtcp_mux.length(), | 3462 rtc::replace_substrs(rtcp_mux.c_str(), rtcp_mux.length(), |
| 3461 xrtcp_mux.c_str(), xrtcp_mux.length(), | 3463 xrtcp_mux.c_str(), xrtcp_mux.length(), |
| 3462 &offer_str); | 3464 &offer_str); |
| 3463 JsepSessionDescription* local_offer = | 3465 JsepSessionDescription* local_offer = |
| 3464 new JsepSessionDescription(JsepSessionDescription::kOffer); | 3466 new JsepSessionDescription(JsepSessionDescription::kOffer); |
| 3465 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL)); | 3467 EXPECT_TRUE((local_offer)->Initialize(offer_str, nullptr)); |
| 3466 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer); | 3468 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer); |
| 3467 JsepSessionDescription* remote_offer = | 3469 JsepSessionDescription* remote_offer = |
| 3468 new JsepSessionDescription(JsepSessionDescription::kOffer); | 3470 new JsepSessionDescription(JsepSessionDescription::kOffer); |
| 3469 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL)); | 3471 EXPECT_TRUE((remote_offer)->Initialize(offer_str, nullptr)); |
| 3470 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer); | 3472 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer); |
| 3471 // Trying unmodified SDP. | 3473 // Trying unmodified SDP. |
| 3472 SetLocalDescriptionWithoutError(offer); | 3474 SetLocalDescriptionWithoutError(offer); |
| 3473 } | 3475 } |
| 3474 | 3476 |
| 3475 TEST_F(WebRtcSessionTest, SetSetupGcm) { | 3477 TEST_F(WebRtcSessionTest, SetSetupGcm) { |
| 3476 InitWithGcm(); | 3478 InitWithGcm(); |
| 3477 SendAudioVideoStream1(); | 3479 SendAudioVideoStream1(); |
| 3478 CreateAndSetRemoteOfferAndLocalAnswer(); | 3480 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3479 } | 3481 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3526 // Different content names. | 3528 // Different content names. |
| 3527 std::string sdp; | 3529 std::string sdp; |
| 3528 EXPECT_TRUE(answer->ToString(&sdp)); | 3530 EXPECT_TRUE(answer->ToString(&sdp)); |
| 3529 const std::string kAudioMid = "a=mid:audio"; | 3531 const std::string kAudioMid = "a=mid:audio"; |
| 3530 const std::string kAudioMidReplaceStr = "a=mid:audio_content_name"; | 3532 const std::string kAudioMidReplaceStr = "a=mid:audio_content_name"; |
| 3531 rtc::replace_substrs(kAudioMid.c_str(), kAudioMid.length(), | 3533 rtc::replace_substrs(kAudioMid.c_str(), kAudioMid.length(), |
| 3532 kAudioMidReplaceStr.c_str(), | 3534 kAudioMidReplaceStr.c_str(), |
| 3533 kAudioMidReplaceStr.length(), | 3535 kAudioMidReplaceStr.length(), |
| 3534 &sdp); | 3536 &sdp); |
| 3535 SessionDescriptionInterface* modified_answer1 = | 3537 SessionDescriptionInterface* modified_answer1 = |
| 3536 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); | 3538 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, nullptr); |
| 3537 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer1); | 3539 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer1); |
| 3538 | 3540 |
| 3539 // Different media types. | 3541 // Different media types. |
| 3540 EXPECT_TRUE(answer->ToString(&sdp)); | 3542 EXPECT_TRUE(answer->ToString(&sdp)); |
| 3541 const std::string kAudioMline = "m=audio"; | 3543 const std::string kAudioMline = "m=audio"; |
| 3542 const std::string kAudioMlineReplaceStr = "m=video"; | 3544 const std::string kAudioMlineReplaceStr = "m=video"; |
| 3543 rtc::replace_substrs(kAudioMline.c_str(), kAudioMline.length(), | 3545 rtc::replace_substrs(kAudioMline.c_str(), kAudioMline.length(), |
| 3544 kAudioMlineReplaceStr.c_str(), | 3546 kAudioMlineReplaceStr.c_str(), |
| 3545 kAudioMlineReplaceStr.length(), | 3547 kAudioMlineReplaceStr.length(), |
| 3546 &sdp); | 3548 &sdp); |
| 3547 SessionDescriptionInterface* modified_answer2 = | 3549 SessionDescriptionInterface* modified_answer2 = |
| 3548 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); | 3550 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, nullptr); |
| 3549 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer2); | 3551 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer2); |
| 3550 | 3552 |
| 3551 SetRemoteDescriptionWithoutError(answer.release()); | 3553 SetRemoteDescriptionWithoutError(answer.release()); |
| 3552 } | 3554 } |
| 3553 | 3555 |
| 3554 // Verifying remote offer and local answer have matching m-lines as per | 3556 // Verifying remote offer and local answer have matching m-lines as per |
| 3555 // RFC 3264. | 3557 // RFC 3264. |
| 3556 TEST_F(WebRtcSessionTest, TestIncorrectMLinesInLocalAnswer) { | 3558 TEST_F(WebRtcSessionTest, TestIncorrectMLinesInLocalAnswer) { |
| 3557 Init(); | 3559 Init(); |
| 3558 SendAudioVideoStream1(); | 3560 SendAudioVideoStream1(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3582 candidate.set_component(1); | 3584 candidate.set_component(1); |
| 3583 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0, | 3585 JsepIceCandidate ice_candidate(kMediaContentName0, kMediaContentIndex0, |
| 3584 candidate); | 3586 candidate); |
| 3585 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); | 3587 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); |
| 3586 cricket::Candidate candidate1; | 3588 cricket::Candidate candidate1; |
| 3587 candidate1.set_component(1); | 3589 candidate1.set_component(1); |
| 3588 JsepIceCandidate ice_candidate1(kMediaContentName1, kMediaContentIndex1, | 3590 JsepIceCandidate ice_candidate1(kMediaContentName1, kMediaContentIndex1, |
| 3589 candidate1); | 3591 candidate1); |
| 3590 EXPECT_TRUE(offer->AddCandidate(&ice_candidate1)); | 3592 EXPECT_TRUE(offer->AddCandidate(&ice_candidate1)); |
| 3591 SetRemoteDescriptionWithoutError(offer); | 3593 SetRemoteDescriptionWithoutError(offer); |
| 3592 ASSERT_TRUE(session_->voice_rtp_transport_channel() != NULL); | 3594 ASSERT_TRUE(session_->voice_rtp_transport_channel() != nullptr); |
| 3593 ASSERT_TRUE(session_->video_rtp_transport_channel() != NULL); | 3595 ASSERT_TRUE(session_->video_rtp_transport_channel() != nullptr); |
| 3594 | 3596 |
| 3595 // Pump for 1 second and verify that no candidates are generated. | 3597 // Pump for 1 second and verify that no candidates are generated. |
| 3596 rtc::Thread::Current()->ProcessMessages(1000); | 3598 rtc::Thread::Current()->ProcessMessages(1000); |
| 3597 EXPECT_TRUE(observer_.mline_0_candidates_.empty()); | 3599 EXPECT_TRUE(observer_.mline_0_candidates_.empty()); |
| 3598 EXPECT_TRUE(observer_.mline_1_candidates_.empty()); | 3600 EXPECT_TRUE(observer_.mline_1_candidates_.empty()); |
| 3599 | 3601 |
| 3600 SessionDescriptionInterface* answer = CreateAnswer(); | 3602 SessionDescriptionInterface* answer = CreateAnswer(); |
| 3601 SetLocalDescriptionWithoutError(answer); | 3603 SetLocalDescriptionWithoutError(answer); |
| 3602 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); | 3604 EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); |
| 3603 } | 3605 } |
| 3604 | 3606 |
| 3605 // This test verifies that crypto parameter is updated in local session | 3607 // This test verifies that crypto parameter is updated in local session |
| 3606 // description as per security policy set in MediaSessionDescriptionFactory. | 3608 // description as per security policy set in MediaSessionDescriptionFactory. |
| 3607 TEST_F(WebRtcSessionTest, TestCryptoAfterSetLocalDescription) { | 3609 TEST_F(WebRtcSessionTest, TestCryptoAfterSetLocalDescription) { |
| 3608 Init(); | 3610 Init(); |
| 3609 SendAudioVideoStream1(); | 3611 SendAudioVideoStream1(); |
| 3610 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 3612 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 3611 | 3613 |
| 3612 // Making sure SetLocalDescription correctly sets crypto value in | 3614 // Making sure SetLocalDescription correctly sets crypto value in |
| 3613 // SessionDescription object after de-serialization of sdp string. The value | 3615 // SessionDescription object after de-serialization of sdp string. The value |
| 3614 // will be set as per MediaSessionDescriptionFactory. | 3616 // will be set as per MediaSessionDescriptionFactory. |
| 3615 std::string offer_str; | 3617 std::string offer_str; |
| 3616 offer->ToString(&offer_str); | 3618 offer->ToString(&offer_str); |
| 3617 SessionDescriptionInterface* jsep_offer_str = | 3619 SessionDescriptionInterface* jsep_offer_str = CreateSessionDescription( |
| 3618 CreateSessionDescription(JsepSessionDescription::kOffer, offer_str, NULL); | 3620 JsepSessionDescription::kOffer, offer_str, nullptr); |
| 3619 SetLocalDescriptionWithoutError(jsep_offer_str); | 3621 SetLocalDescriptionWithoutError(jsep_offer_str); |
| 3620 EXPECT_TRUE(session_->voice_channel()->srtp_required_for_testing()); | 3622 EXPECT_TRUE(session_->voice_channel()->srtp_required_for_testing()); |
| 3621 EXPECT_TRUE(session_->video_channel()->srtp_required_for_testing()); | 3623 EXPECT_TRUE(session_->video_channel()->srtp_required_for_testing()); |
| 3622 } | 3624 } |
| 3623 | 3625 |
| 3624 // This test verifies the crypto parameter when security is disabled. | 3626 // This test verifies the crypto parameter when security is disabled. |
| 3625 TEST_F(WebRtcSessionTest, TestCryptoAfterSetLocalDescriptionWithDisabled) { | 3627 TEST_F(WebRtcSessionTest, TestCryptoAfterSetLocalDescriptionWithDisabled) { |
| 3626 options_.disable_encryption = true; | 3628 options_.disable_encryption = true; |
| 3627 Init(); | 3629 Init(); |
| 3628 SendAudioVideoStream1(); | 3630 SendAudioVideoStream1(); |
| 3629 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 3631 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 3630 | 3632 |
| 3631 // Making sure SetLocalDescription correctly sets crypto value in | 3633 // Making sure SetLocalDescription correctly sets crypto value in |
| 3632 // SessionDescription object after de-serialization of sdp string. The value | 3634 // SessionDescription object after de-serialization of sdp string. The value |
| 3633 // will be set as per MediaSessionDescriptionFactory. | 3635 // will be set as per MediaSessionDescriptionFactory. |
| 3634 std::string offer_str; | 3636 std::string offer_str; |
| 3635 offer->ToString(&offer_str); | 3637 offer->ToString(&offer_str); |
| 3636 SessionDescriptionInterface* jsep_offer_str = | 3638 SessionDescriptionInterface* jsep_offer_str = CreateSessionDescription( |
| 3637 CreateSessionDescription(JsepSessionDescription::kOffer, offer_str, NULL); | 3639 JsepSessionDescription::kOffer, offer_str, nullptr); |
| 3638 SetLocalDescriptionWithoutError(jsep_offer_str); | 3640 SetLocalDescriptionWithoutError(jsep_offer_str); |
| 3639 EXPECT_FALSE(session_->voice_channel()->srtp_required_for_testing()); | 3641 EXPECT_FALSE(session_->voice_channel()->srtp_required_for_testing()); |
| 3640 EXPECT_FALSE(session_->video_channel()->srtp_required_for_testing()); | 3642 EXPECT_FALSE(session_->video_channel()->srtp_required_for_testing()); |
| 3641 } | 3643 } |
| 3642 | 3644 |
| 3643 // This test verifies that an answer contains new ufrag and password if an offer | 3645 // This test verifies that an answer contains new ufrag and password if an offer |
| 3644 // with new ufrag and password is received. | 3646 // with new ufrag and password is received. |
| 3645 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) { | 3647 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) { |
| 3646 Init(); | 3648 Init(); |
| 3647 cricket::MediaSessionOptions options; | 3649 cricket::MediaSessionOptions options; |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3894 ASSERT_TRUE(session_->sctp_content_name()); | 3896 ASSERT_TRUE(session_->sctp_content_name()); |
| 3895 ASSERT_TRUE(session_->sctp_transport_name()); | 3897 ASSERT_TRUE(session_->sctp_transport_name()); |
| 3896 EXPECT_EQ("data", *session_->sctp_content_name()); | 3898 EXPECT_EQ("data", *session_->sctp_content_name()); |
| 3897 EXPECT_EQ("audio", *session_->sctp_transport_name()); | 3899 EXPECT_EQ("audio", *session_->sctp_transport_name()); |
| 3898 } | 3900 } |
| 3899 | 3901 |
| 3900 TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { | 3902 TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { |
| 3901 InitWithDtls(GetParam()); | 3903 InitWithDtls(GetParam()); |
| 3902 | 3904 |
| 3903 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 3905 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 3904 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL); | 3906 EXPECT_TRUE(offer->description()->GetContentByName("data") == nullptr); |
| 3905 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL); | 3907 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == nullptr); |
| 3906 } | 3908 } |
| 3907 | 3909 |
| 3908 TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { | 3910 TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { |
| 3909 SetFactoryDtlsSrtp(); | 3911 SetFactoryDtlsSrtp(); |
| 3910 InitWithDtls(GetParam()); | 3912 InitWithDtls(GetParam()); |
| 3911 | 3913 |
| 3912 // Create remote offer with SCTP. | 3914 // Create remote offer with SCTP. |
| 3913 cricket::MediaSessionOptions options; | 3915 cricket::MediaSessionOptions options; |
| 3914 options.data_channel_type = cricket::DCT_SCTP; | 3916 options.data_channel_type = cricket::DCT_SCTP; |
| 3915 JsepSessionDescription* offer = | 3917 JsepSessionDescription* offer = |
| 3916 CreateRemoteOffer(options, cricket::SEC_DISABLED); | 3918 CreateRemoteOffer(options, cricket::SEC_DISABLED); |
| 3917 SetRemoteDescriptionWithoutError(offer); | 3919 SetRemoteDescriptionWithoutError(offer); |
| 3918 | 3920 |
| 3919 // Verifies the answer contains SCTP. | 3921 // Verifies the answer contains SCTP. |
| 3920 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 3922 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 3921 EXPECT_TRUE(answer != NULL); | 3923 EXPECT_TRUE(answer != nullptr); |
| 3922 EXPECT_TRUE(answer->description()->GetContentByName("data") != NULL); | 3924 EXPECT_TRUE(answer->description()->GetContentByName("data") != nullptr); |
| 3923 EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL); | 3925 EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != nullptr); |
| 3924 } | 3926 } |
| 3925 | 3927 |
| 3926 // Test that if DTLS is disabled, we don't end up with an SctpTransport | 3928 // Test that if DTLS is disabled, we don't end up with an SctpTransport |
| 3927 // created (or an RtpDataChannel). | 3929 // created (or an RtpDataChannel). |
| 3928 TEST_P(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) { | 3930 TEST_P(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) { |
| 3929 configuration_.enable_dtls_srtp = rtc::Optional<bool>(false); | 3931 configuration_.enable_dtls_srtp = rtc::Optional<bool>(false); |
| 3930 InitWithDtls(GetParam()); | 3932 InitWithDtls(GetParam()); |
| 3931 | 3933 |
| 3932 SetLocalDescriptionWithDataChannel(); | 3934 SetLocalDescriptionWithDataChannel(); |
| 3933 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); | 3935 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3968 // into the stream. | 3970 // into the stream. |
| 3969 cricket::MediaSessionOptions options; | 3971 cricket::MediaSessionOptions options; |
| 3970 JsepSessionDescription* offer = CreateRemoteOfferWithSctpPort( | 3972 JsepSessionDescription* offer = CreateRemoteOfferWithSctpPort( |
| 3971 "stream1", new_send_port, options); | 3973 "stream1", new_send_port, options); |
| 3972 | 3974 |
| 3973 // SetRemoteDescription will take the ownership of the offer. | 3975 // SetRemoteDescription will take the ownership of the offer. |
| 3974 SetRemoteDescriptionWithoutError(offer); | 3976 SetRemoteDescriptionWithoutError(offer); |
| 3975 | 3977 |
| 3976 SessionDescriptionInterface* answer = | 3978 SessionDescriptionInterface* answer = |
| 3977 ChangeSDPSctpPort(new_recv_port, CreateAnswer()); | 3979 ChangeSDPSctpPort(new_recv_port, CreateAnswer()); |
| 3978 ASSERT_TRUE(answer != NULL); | 3980 ASSERT_TRUE(answer != nullptr); |
| 3979 | 3981 |
| 3980 // Now set the local description, which'll take ownership of the answer. | 3982 // Now set the local description, which'll take ownership of the answer. |
| 3981 SetLocalDescriptionWithoutError(answer); | 3983 SetLocalDescriptionWithoutError(answer); |
| 3982 | 3984 |
| 3983 // TEST PLAN: Set the port number to something new, set it in the SDP, | 3985 // TEST PLAN: Set the port number to something new, set it in the SDP, |
| 3984 // and pass it all the way down. | 3986 // and pass it all the way down. |
| 3985 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); | 3987 EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
| 3986 CreateDataChannel(); | 3988 CreateDataChannel(); |
| 3987 ASSERT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); | 3989 ASSERT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
| 3988 EXPECT_EQ( | 3990 EXPECT_EQ( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4035 // Verifies that CreateOffer succeeds when CreateOffer is called before async | 4037 // Verifies that CreateOffer succeeds when CreateOffer is called before async |
| 4036 // identity generation is finished (even if a certificate is provided this is | 4038 // identity generation is finished (even if a certificate is provided this is |
| 4037 // an async op). | 4039 // an async op). |
| 4038 TEST_P(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { | 4040 TEST_P(WebRtcSessionTest, TestCreateOfferBeforeIdentityRequestReturnSuccess) { |
| 4039 InitWithDtls(GetParam()); | 4041 InitWithDtls(GetParam()); |
| 4040 | 4042 |
| 4041 EXPECT_TRUE(session_->waiting_for_certificate_for_testing()); | 4043 EXPECT_TRUE(session_->waiting_for_certificate_for_testing()); |
| 4042 SendAudioVideoStream1(); | 4044 SendAudioVideoStream1(); |
| 4043 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 4045 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 4044 | 4046 |
| 4045 EXPECT_TRUE(offer != NULL); | 4047 EXPECT_TRUE(offer != nullptr); |
| 4046 VerifyNoCryptoParams(offer->description(), true); | 4048 VerifyNoCryptoParams(offer->description(), true); |
| 4047 VerifyFingerprintStatus(offer->description(), true); | 4049 VerifyFingerprintStatus(offer->description(), true); |
| 4048 } | 4050 } |
| 4049 | 4051 |
| 4050 // Verifies that CreateAnswer succeeds when CreateOffer is called before async | 4052 // Verifies that CreateAnswer succeeds when CreateOffer is called before async |
| 4051 // identity generation is finished (even if a certificate is provided this is | 4053 // identity generation is finished (even if a certificate is provided this is |
| 4052 // an async op). | 4054 // an async op). |
| 4053 TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { | 4055 TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { |
| 4054 InitWithDtls(GetParam()); | 4056 InitWithDtls(GetParam()); |
| 4055 SetFactoryDtlsSrtp(); | 4057 SetFactoryDtlsSrtp(); |
| 4056 | 4058 |
| 4057 cricket::MediaSessionOptions options; | 4059 cricket::MediaSessionOptions options; |
| 4058 options.recv_video = true; | 4060 options.recv_video = true; |
| 4059 std::unique_ptr<JsepSessionDescription> offer( | 4061 std::unique_ptr<JsepSessionDescription> offer( |
| 4060 CreateRemoteOffer(options, cricket::SEC_DISABLED)); | 4062 CreateRemoteOffer(options, cricket::SEC_DISABLED)); |
| 4061 ASSERT_TRUE(offer.get() != NULL); | 4063 ASSERT_TRUE(offer.get() != nullptr); |
| 4062 SetRemoteDescriptionWithoutError(offer.release()); | 4064 SetRemoteDescriptionWithoutError(offer.release()); |
| 4063 | 4065 |
| 4064 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); | 4066 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); |
| 4065 EXPECT_TRUE(answer != NULL); | 4067 EXPECT_TRUE(answer != nullptr); |
| 4066 VerifyNoCryptoParams(answer->description(), true); | 4068 VerifyNoCryptoParams(answer->description(), true); |
| 4067 VerifyFingerprintStatus(answer->description(), true); | 4069 VerifyFingerprintStatus(answer->description(), true); |
| 4068 } | 4070 } |
| 4069 | 4071 |
| 4070 // Verifies that CreateOffer succeeds when CreateOffer is called after async | 4072 // Verifies that CreateOffer succeeds when CreateOffer is called after async |
| 4071 // identity generation is finished (even if a certificate is provided this is | 4073 // identity generation is finished (even if a certificate is provided this is |
| 4072 // an async op). | 4074 // an async op). |
| 4073 TEST_P(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { | 4075 TEST_P(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnSuccess) { |
| 4074 InitWithDtls(GetParam()); | 4076 InitWithDtls(GetParam()); |
| 4075 | 4077 |
| 4076 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); | 4078 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); |
| 4077 | 4079 |
| 4078 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 4080 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 4079 EXPECT_TRUE(offer != NULL); | 4081 EXPECT_TRUE(offer != nullptr); |
| 4080 } | 4082 } |
| 4081 | 4083 |
| 4082 // Verifies that CreateOffer fails when CreateOffer is called after async | 4084 // Verifies that CreateOffer fails when CreateOffer is called after async |
| 4083 // identity generation fails. | 4085 // identity generation fails. |
| 4084 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnFailure) { | 4086 TEST_F(WebRtcSessionTest, TestCreateOfferAfterIdentityRequestReturnFailure) { |
| 4085 InitWithDtlsIdentityGenFail(); | 4087 InitWithDtlsIdentityGenFail(); |
| 4086 | 4088 |
| 4087 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); | 4089 EXPECT_TRUE_WAIT(!session_->waiting_for_certificate_for_testing(), 1000); |
| 4088 | 4090 |
| 4089 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); | 4091 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); |
| 4090 EXPECT_TRUE(offer == NULL); | 4092 EXPECT_TRUE(offer == nullptr); |
| 4091 } | 4093 } |
| 4092 | 4094 |
| 4093 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made | 4095 // Verifies that CreateOffer succeeds when Multiple CreateOffer calls are made |
| 4094 // before async identity generation is finished. | 4096 // before async identity generation is finished. |
| 4095 TEST_P(WebRtcSessionTest, | 4097 TEST_P(WebRtcSessionTest, |
| 4096 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) { | 4098 TestMultipleCreateOfferBeforeIdentityRequestReturnSuccess) { |
| 4097 VerifyMultipleAsyncCreateDescription(GetParam(), | 4099 VerifyMultipleAsyncCreateDescription(GetParam(), |
| 4098 CreateSessionDescriptionRequest::kOffer); | 4100 CreateSessionDescriptionRequest::kOffer); |
| 4099 } | 4101 } |
| 4100 | 4102 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 4127 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) { | 4129 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) { |
| 4128 // Init without DTLS. | 4130 // Init without DTLS. |
| 4129 Init(); | 4131 Init(); |
| 4130 // Create a remote offer with secured transport disabled. | 4132 // Create a remote offer with secured transport disabled. |
| 4131 cricket::MediaSessionOptions options; | 4133 cricket::MediaSessionOptions options; |
| 4132 JsepSessionDescription* offer(CreateRemoteOffer( | 4134 JsepSessionDescription* offer(CreateRemoteOffer( |
| 4133 options, cricket::SEC_DISABLED)); | 4135 options, cricket::SEC_DISABLED)); |
| 4134 // Adds a DTLS fingerprint to the remote offer. | 4136 // Adds a DTLS fingerprint to the remote offer. |
| 4135 cricket::SessionDescription* sdp = offer->description(); | 4137 cricket::SessionDescription* sdp = offer->description(); |
| 4136 TransportInfo* audio = sdp->GetTransportInfoByName("audio"); | 4138 TransportInfo* audio = sdp->GetTransportInfoByName("audio"); |
| 4137 ASSERT_TRUE(audio != NULL); | 4139 ASSERT_TRUE(audio != nullptr); |
| 4138 ASSERT_TRUE(audio->description.identity_fingerprint.get() == NULL); | 4140 ASSERT_TRUE(audio->description.identity_fingerprint.get() == nullptr); |
| 4139 audio->description.identity_fingerprint.reset( | 4141 audio->description.identity_fingerprint.reset( |
| 4140 rtc::SSLFingerprint::CreateFromRfc4572( | 4142 rtc::SSLFingerprint::CreateFromRfc4572( |
| 4141 rtc::DIGEST_SHA_256, kFakeDtlsFingerprint)); | 4143 rtc::DIGEST_SHA_256, kFakeDtlsFingerprint)); |
| 4142 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, | 4144 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, |
| 4143 offer); | 4145 offer); |
| 4144 } | 4146 } |
| 4145 | 4147 |
| 4146 TEST_F(WebRtcSessionTest, TestCombinedAudioVideoBweConstraint) { | 4148 TEST_F(WebRtcSessionTest, TestCombinedAudioVideoBweConstraint) { |
| 4147 configuration_.combined_audio_video_bwe = rtc::Optional<bool>(true); | 4149 configuration_.combined_audio_video_bwe = rtc::Optional<bool>(true); |
| 4148 Init(); | 4150 Init(); |
| 4149 SendAudioVideoStream1(); | 4151 SendAudioVideoStream1(); |
| 4150 SessionDescriptionInterface* offer = CreateOffer(); | 4152 SessionDescriptionInterface* offer = CreateOffer(); |
| 4151 | 4153 |
| 4152 SetLocalDescriptionWithoutError(offer); | 4154 SetLocalDescriptionWithoutError(offer); |
| 4153 | 4155 |
| 4154 voice_channel_ = media_engine_->GetVoiceChannel(0); | 4156 voice_channel_ = media_engine_->GetVoiceChannel(0); |
| 4155 | 4157 |
| 4156 ASSERT_TRUE(voice_channel_ != NULL); | 4158 ASSERT_TRUE(voice_channel_ != nullptr); |
| 4157 const cricket::AudioOptions& audio_options = voice_channel_->options(); | 4159 const cricket::AudioOptions& audio_options = voice_channel_->options(); |
| 4158 EXPECT_EQ(rtc::Optional<bool>(true), audio_options.combined_audio_video_bwe); | 4160 EXPECT_EQ(rtc::Optional<bool>(true), audio_options.combined_audio_video_bwe); |
| 4159 } | 4161 } |
| 4160 | 4162 |
| 4161 // Tests that we can renegotiate new media content with ICE candidates in the | 4163 // Tests that we can renegotiate new media content with ICE candidates in the |
| 4162 // new remote SDP. | 4164 // new remote SDP. |
| 4163 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { | 4165 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesInSdp) { |
| 4164 InitWithDtls(GetParam()); | 4166 InitWithDtls(GetParam()); |
| 4165 SetFactoryDtlsSrtp(); | 4167 SetFactoryDtlsSrtp(); |
| 4166 | 4168 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4236 } | 4238 } |
| 4237 #endif // HAVE_QUIC | 4239 #endif // HAVE_QUIC |
| 4238 | 4240 |
| 4239 // Tests that RTX codec is removed from the answer when it isn't supported | 4241 // Tests that RTX codec is removed from the answer when it isn't supported |
| 4240 // by local side. | 4242 // by local side. |
| 4241 TEST_F(WebRtcSessionTest, TestRtxRemovedByCreateAnswer) { | 4243 TEST_F(WebRtcSessionTest, TestRtxRemovedByCreateAnswer) { |
| 4242 Init(); | 4244 Init(); |
| 4243 SendAudioVideoStream1(); | 4245 SendAudioVideoStream1(); |
| 4244 std::string offer_sdp(kSdpWithRtx); | 4246 std::string offer_sdp(kSdpWithRtx); |
| 4245 | 4247 |
| 4246 SessionDescriptionInterface* offer = | 4248 SessionDescriptionInterface* offer = CreateSessionDescription( |
| 4247 CreateSessionDescription(JsepSessionDescription::kOffer, offer_sdp, NULL); | 4249 JsepSessionDescription::kOffer, offer_sdp, nullptr); |
| 4248 EXPECT_TRUE(offer->ToString(&offer_sdp)); | 4250 EXPECT_TRUE(offer->ToString(&offer_sdp)); |
| 4249 | 4251 |
| 4250 // Offer SDP contains the RTX codec. | 4252 // Offer SDP contains the RTX codec. |
| 4251 EXPECT_TRUE(ContainsVideoCodecWithName(offer, "rtx")); | 4253 EXPECT_TRUE(ContainsVideoCodecWithName(offer, "rtx")); |
| 4252 SetRemoteDescriptionWithoutError(offer); | 4254 SetRemoteDescriptionWithoutError(offer); |
| 4253 | 4255 |
| 4254 SessionDescriptionInterface* answer = CreateAnswer(); | 4256 SessionDescriptionInterface* answer = CreateAnswer(); |
| 4255 // Answer SDP does not contain the RTX codec. | 4257 // Answer SDP does not contain the RTX codec. |
| 4256 EXPECT_FALSE(ContainsVideoCodecWithName(answer, "rtx")); | 4258 EXPECT_FALSE(ContainsVideoCodecWithName(answer, "rtx")); |
| 4257 SetLocalDescriptionWithoutError(answer); | 4259 SetLocalDescriptionWithoutError(answer); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4339 } | 4341 } |
| 4340 | 4342 |
| 4341 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test | 4343 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
| 4342 // currently fails because upon disconnection and reconnection OnIceComplete is | 4344 // currently fails because upon disconnection and reconnection OnIceComplete is |
| 4343 // called more than once without returning to IceGatheringGathering. | 4345 // called more than once without returning to IceGatheringGathering. |
| 4344 | 4346 |
| 4345 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, | 4347 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, |
| 4346 WebRtcSessionTest, | 4348 WebRtcSessionTest, |
| 4347 testing::Values(ALREADY_GENERATED, | 4349 testing::Values(ALREADY_GENERATED, |
| 4348 DTLS_IDENTITY_STORE)); | 4350 DTLS_IDENTITY_STORE)); |
| OLD | NEW |