| 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 using webrtc::JsepSessionDescription; | 63 using webrtc::JsepSessionDescription; |
| 64 using webrtc::PeerConnectionFactoryInterface; | 64 using webrtc::PeerConnectionFactoryInterface; |
| 65 using webrtc::PeerConnectionInterface; | 65 using webrtc::PeerConnectionInterface; |
| 66 using webrtc::SessionDescriptionInterface; | 66 using webrtc::SessionDescriptionInterface; |
| 67 using webrtc::SessionStats; | 67 using webrtc::SessionStats; |
| 68 using webrtc::StreamCollection; | 68 using webrtc::StreamCollection; |
| 69 using webrtc::WebRtcSession; | 69 using webrtc::WebRtcSession; |
| 70 using webrtc::kBundleWithoutRtcpMux; | 70 using webrtc::kBundleWithoutRtcpMux; |
| 71 using webrtc::kCreateChannelFailed; | 71 using webrtc::kCreateChannelFailed; |
| 72 using webrtc::kInvalidSdp; | 72 using webrtc::kInvalidSdp; |
| 73 using webrtc::kMlineMismatch; | 73 using webrtc::kMlineMismatchInAnswer; |
| 74 using webrtc::kPushDownTDFailed; | 74 using webrtc::kPushDownTDFailed; |
| 75 using webrtc::kSdpWithoutIceUfragPwd; | 75 using webrtc::kSdpWithoutIceUfragPwd; |
| 76 using webrtc::kSdpWithoutDtlsFingerprint; | 76 using webrtc::kSdpWithoutDtlsFingerprint; |
| 77 using webrtc::kSdpWithoutSdesCrypto; | 77 using webrtc::kSdpWithoutSdesCrypto; |
| 78 using webrtc::kSessionError; | 78 using webrtc::kSessionError; |
| 79 using webrtc::kSessionErrorDesc; | 79 using webrtc::kSessionErrorDesc; |
| 80 using webrtc::kMaxUnsignalledRecvStreams; | 80 using webrtc::kMaxUnsignalledRecvStreams; |
| 81 | 81 |
| 82 typedef PeerConnectionInterface::RTCOfferAnswerOptions RTCOfferAnswerOptions; | 82 typedef PeerConnectionInterface::RTCOfferAnswerOptions RTCOfferAnswerOptions; |
| 83 | 83 |
| (...skipping 3656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3740 CreateRemoteAnswer(session_->local_description())); | 3740 CreateRemoteAnswer(session_->local_description())); |
| 3741 | 3741 |
| 3742 cricket::SessionDescription* answer_copy = answer->description()->Copy(); | 3742 cricket::SessionDescription* answer_copy = answer->description()->Copy(); |
| 3743 answer_copy->RemoveContentByName("video"); | 3743 answer_copy->RemoveContentByName("video"); |
| 3744 JsepSessionDescription* modified_answer = | 3744 JsepSessionDescription* modified_answer = |
| 3745 new JsepSessionDescription(JsepSessionDescription::kAnswer); | 3745 new JsepSessionDescription(JsepSessionDescription::kAnswer); |
| 3746 | 3746 |
| 3747 EXPECT_TRUE(modified_answer->Initialize(answer_copy, | 3747 EXPECT_TRUE(modified_answer->Initialize(answer_copy, |
| 3748 answer->session_id(), | 3748 answer->session_id(), |
| 3749 answer->session_version())); | 3749 answer->session_version())); |
| 3750 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer); | 3750 SetRemoteDescriptionAnswerExpectError(kMlineMismatchInAnswer, |
| 3751 modified_answer); |
| 3751 | 3752 |
| 3752 // Different content names. | 3753 // Different content names. |
| 3753 std::string sdp; | 3754 std::string sdp; |
| 3754 EXPECT_TRUE(answer->ToString(&sdp)); | 3755 EXPECT_TRUE(answer->ToString(&sdp)); |
| 3755 const std::string kAudioMid = "a=mid:audio"; | 3756 const std::string kAudioMid = "a=mid:audio"; |
| 3756 const std::string kAudioMidReplaceStr = "a=mid:audio_content_name"; | 3757 const std::string kAudioMidReplaceStr = "a=mid:audio_content_name"; |
| 3757 rtc::replace_substrs(kAudioMid.c_str(), kAudioMid.length(), | 3758 rtc::replace_substrs(kAudioMid.c_str(), kAudioMid.length(), |
| 3758 kAudioMidReplaceStr.c_str(), | 3759 kAudioMidReplaceStr.c_str(), |
| 3759 kAudioMidReplaceStr.length(), | 3760 kAudioMidReplaceStr.length(), |
| 3760 &sdp); | 3761 &sdp); |
| 3761 SessionDescriptionInterface* modified_answer1 = | 3762 SessionDescriptionInterface* modified_answer1 = |
| 3762 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); | 3763 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); |
| 3763 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer1); | 3764 SetRemoteDescriptionAnswerExpectError(kMlineMismatchInAnswer, |
| 3765 modified_answer1); |
| 3764 | 3766 |
| 3765 // Different media types. | 3767 // Different media types. |
| 3766 EXPECT_TRUE(answer->ToString(&sdp)); | 3768 EXPECT_TRUE(answer->ToString(&sdp)); |
| 3767 const std::string kAudioMline = "m=audio"; | 3769 const std::string kAudioMline = "m=audio"; |
| 3768 const std::string kAudioMlineReplaceStr = "m=video"; | 3770 const std::string kAudioMlineReplaceStr = "m=video"; |
| 3769 rtc::replace_substrs(kAudioMline.c_str(), kAudioMline.length(), | 3771 rtc::replace_substrs(kAudioMline.c_str(), kAudioMline.length(), |
| 3770 kAudioMlineReplaceStr.c_str(), | 3772 kAudioMlineReplaceStr.c_str(), |
| 3771 kAudioMlineReplaceStr.length(), | 3773 kAudioMlineReplaceStr.length(), |
| 3772 &sdp); | 3774 &sdp); |
| 3773 SessionDescriptionInterface* modified_answer2 = | 3775 SessionDescriptionInterface* modified_answer2 = |
| 3774 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); | 3776 CreateSessionDescription(JsepSessionDescription::kAnswer, sdp, NULL); |
| 3775 SetRemoteDescriptionAnswerExpectError(kMlineMismatch, modified_answer2); | 3777 SetRemoteDescriptionAnswerExpectError(kMlineMismatchInAnswer, |
| 3778 modified_answer2); |
| 3776 | 3779 |
| 3777 SetRemoteDescriptionWithoutError(answer.release()); | 3780 SetRemoteDescriptionWithoutError(answer.release()); |
| 3778 } | 3781 } |
| 3779 | 3782 |
| 3780 // Verifying remote offer and local answer have matching m-lines as per | 3783 // Verifying remote offer and local answer have matching m-lines as per |
| 3781 // RFC 3264. | 3784 // RFC 3264. |
| 3782 TEST_F(WebRtcSessionTest, TestIncorrectMLinesInLocalAnswer) { | 3785 TEST_F(WebRtcSessionTest, TestIncorrectMLinesInLocalAnswer) { |
| 3783 Init(); | 3786 Init(); |
| 3784 SendAudioVideoStream1(); | 3787 SendAudioVideoStream1(); |
| 3785 SessionDescriptionInterface* offer = CreateRemoteOffer(); | 3788 SessionDescriptionInterface* offer = CreateRemoteOffer(); |
| 3786 SetRemoteDescriptionWithoutError(offer); | 3789 SetRemoteDescriptionWithoutError(offer); |
| 3787 SessionDescriptionInterface* answer = CreateAnswer(); | 3790 SessionDescriptionInterface* answer = CreateAnswer(); |
| 3788 | 3791 |
| 3789 cricket::SessionDescription* answer_copy = answer->description()->Copy(); | 3792 cricket::SessionDescription* answer_copy = answer->description()->Copy(); |
| 3790 answer_copy->RemoveContentByName("video"); | 3793 answer_copy->RemoveContentByName("video"); |
| 3791 JsepSessionDescription* modified_answer = | 3794 JsepSessionDescription* modified_answer = |
| 3792 new JsepSessionDescription(JsepSessionDescription::kAnswer); | 3795 new JsepSessionDescription(JsepSessionDescription::kAnswer); |
| 3793 | 3796 |
| 3794 EXPECT_TRUE(modified_answer->Initialize(answer_copy, | 3797 EXPECT_TRUE(modified_answer->Initialize(answer_copy, |
| 3795 answer->session_id(), | 3798 answer->session_id(), |
| 3796 answer->session_version())); | 3799 answer->session_version())); |
| 3797 SetLocalDescriptionAnswerExpectError(kMlineMismatch, modified_answer); | 3800 SetLocalDescriptionAnswerExpectError(kMlineMismatchInAnswer, modified_answer); |
| 3798 SetLocalDescriptionWithoutError(answer); | 3801 SetLocalDescriptionWithoutError(answer); |
| 3799 } | 3802 } |
| 3800 | 3803 |
| 3801 // This test verifies that WebRtcSession does not start candidate allocation | 3804 // This test verifies that WebRtcSession does not start candidate allocation |
| 3802 // before SetLocalDescription is called. | 3805 // before SetLocalDescription is called. |
| 3803 TEST_F(WebRtcSessionTest, TestIceStartAfterSetLocalDescriptionOnly) { | 3806 TEST_F(WebRtcSessionTest, TestIceStartAfterSetLocalDescriptionOnly) { |
| 3804 Init(); | 3807 Init(); |
| 3805 SendAudioVideoStream1(); | 3808 SendAudioVideoStream1(); |
| 3806 SessionDescriptionInterface* offer = CreateRemoteOffer(); | 3809 SessionDescriptionInterface* offer = CreateRemoteOffer(); |
| 3807 cricket::Candidate candidate; | 3810 cricket::Candidate candidate; |
| (...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4569 } | 4572 } |
| 4570 | 4573 |
| 4571 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test | 4574 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
| 4572 // currently fails because upon disconnection and reconnection OnIceComplete is | 4575 // currently fails because upon disconnection and reconnection OnIceComplete is |
| 4573 // called more than once without returning to IceGatheringGathering. | 4576 // called more than once without returning to IceGatheringGathering. |
| 4574 | 4577 |
| 4575 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, | 4578 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, |
| 4576 WebRtcSessionTest, | 4579 WebRtcSessionTest, |
| 4577 testing::Values(ALREADY_GENERATED, | 4580 testing::Values(ALREADY_GENERATED, |
| 4578 DTLS_IDENTITY_STORE)); | 4581 DTLS_IDENTITY_STORE)); |
| OLD | NEW |