| Index: talk/app/webrtc/webrtcsession_unittest.cc
|
| diff --git a/talk/app/webrtc/webrtcsession_unittest.cc b/talk/app/webrtc/webrtcsession_unittest.cc
|
| index bf7fc83d0b910d24631ec22048b3004d0a18c478..e81b8b5b545cb57ad7c84f2e56d38fddd2f19ae5 100644
|
| --- a/talk/app/webrtc/webrtcsession_unittest.cc
|
| +++ b/talk/app/webrtc/webrtcsession_unittest.cc
|
| @@ -1957,6 +1957,67 @@ TEST_P(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) {
|
| SetLocalDescriptionWithoutError(answer);
|
| }
|
|
|
| +// Test that we can create and set an answer correctly when different
|
| +// SSL roles have been negotiated for different transports.
|
| +// See: https://bugs.chromium.org/p/webrtc/issues/detail?id=4525
|
| +TEST_P(WebRtcSessionTest, TestCreateAnswerWithDifferentSslRoles) {
|
| + SendAudioVideoStream1();
|
| + InitWithDtls(GetParam());
|
| + SetFactoryDtlsSrtp();
|
| +
|
| + SessionDescriptionInterface* offer = CreateOffer();
|
| + SetLocalDescriptionWithoutError(offer);
|
| +
|
| + cricket::MediaSessionOptions options;
|
| + options.recv_video = true;
|
| +
|
| + // First, negotiate different SSL roles.
|
| + SessionDescriptionInterface* answer =
|
| + CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
|
| + TransportInfo* audio_transport_info =
|
| + answer->description()->GetTransportInfoByName("audio");
|
| + audio_transport_info->description.connection_role =
|
| + cricket::CONNECTIONROLE_ACTIVE;
|
| + TransportInfo* video_transport_info =
|
| + answer->description()->GetTransportInfoByName("video");
|
| + video_transport_info->description.connection_role =
|
| + cricket::CONNECTIONROLE_PASSIVE;
|
| + SetRemoteDescriptionWithoutError(answer);
|
| +
|
| + // Now create an offer in the reverse direction, and ensure the initial
|
| + // offerer responds with an answer with correct SSL roles.
|
| + offer = CreateRemoteOfferWithVersion(options, cricket::SEC_DISABLED,
|
| + kSessionVersion,
|
| + session_->remote_description());
|
| + SetRemoteDescriptionWithoutError(offer);
|
| +
|
| + answer = CreateAnswer(nullptr);
|
| + audio_transport_info = answer->description()->GetTransportInfoByName("audio");
|
| + EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE,
|
| + audio_transport_info->description.connection_role);
|
| + video_transport_info = answer->description()->GetTransportInfoByName("video");
|
| + EXPECT_EQ(cricket::CONNECTIONROLE_ACTIVE,
|
| + video_transport_info->description.connection_role);
|
| + SetLocalDescriptionWithoutError(answer);
|
| +
|
| + // Lastly, start BUNDLE-ing on "audio", expecting that the "passive" role of
|
| + // audio is transferred over to video in the answer that completes the BUNDLE
|
| + // negotiation.
|
| + options.bundle_enabled = true;
|
| + offer = CreateRemoteOfferWithVersion(options, cricket::SEC_DISABLED,
|
| + kSessionVersion,
|
| + session_->remote_description());
|
| + SetRemoteDescriptionWithoutError(offer);
|
| + answer = CreateAnswer(nullptr);
|
| + audio_transport_info = answer->description()->GetTransportInfoByName("audio");
|
| + EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE,
|
| + audio_transport_info->description.connection_role);
|
| + video_transport_info = answer->description()->GetTransportInfoByName("video");
|
| + EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE,
|
| + video_transport_info->description.connection_role);
|
| + SetLocalDescriptionWithoutError(answer);
|
| +}
|
| +
|
| TEST_F(WebRtcSessionTest, TestSetLocalOfferTwice) {
|
| Init();
|
| SendNothing();
|
| @@ -3625,7 +3686,9 @@ TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) {
|
| SetLocalDescriptionWithoutError(answer.release());
|
|
|
| // Receive an offer with new ufrag and password.
|
| - options.transport_options.ice_restart = true;
|
| + options.audio_transport_options.ice_restart = true;
|
| + options.video_transport_options.ice_restart = true;
|
| + options.data_transport_options.ice_restart = true;
|
| rtc::scoped_ptr<JsepSessionDescription> updated_offer1(
|
| CreateRemoteOffer(options, session_->remote_description()));
|
| SetRemoteDescriptionWithoutError(updated_offer1.release());
|
| @@ -3656,7 +3719,9 @@ TEST_F(WebRtcSessionTest, TestCreateAnswerWithOldUfragAndPassword) {
|
| SetLocalDescriptionWithoutError(answer.release());
|
|
|
| // Receive an offer without changed ufrag or password.
|
| - options.transport_options.ice_restart = false;
|
| + options.audio_transport_options.ice_restart = false;
|
| + options.video_transport_options.ice_restart = false;
|
| + options.data_transport_options.ice_restart = false;
|
| rtc::scoped_ptr<JsepSessionDescription> updated_offer2(
|
| CreateRemoteOffer(options, session_->remote_description()));
|
| SetRemoteDescriptionWithoutError(updated_offer2.release());
|
|
|