Only generate one CNAME per PeerConnection.
The CNAME is generated in the PeerConnection constructor and is populated through the MediaSessionOptions. A default cname will be set in the MediaSessionOptions constructor. BUG=webrtc:3431 Review-Url: https://codereview.webrtc.org/1871993002 Cr-Commit-Position: refs/heads/master@{#12650}
This commit is contained in:
@ -934,6 +934,34 @@ class PeerConnectionInterfaceTest : public testing::Test {
|
||||
ASSERT_TRUE(stream->AddTrack(video_track));
|
||||
}
|
||||
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> CreateOfferWithOneAudioStream() {
|
||||
CreatePeerConnection();
|
||||
AddVoiceStream(kStreamLabel1);
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> offer;
|
||||
EXPECT_TRUE(DoCreateOffer(&offer, nullptr));
|
||||
return offer;
|
||||
}
|
||||
|
||||
rtc::scoped_ptr<SessionDescriptionInterface>
|
||||
CreateAnswerWithOneAudioStream() {
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> offer =
|
||||
CreateOfferWithOneAudioStream();
|
||||
EXPECT_TRUE(DoSetRemoteDescription(offer.release()));
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> answer;
|
||||
EXPECT_TRUE(DoCreateAnswer(&answer, nullptr));
|
||||
return answer;
|
||||
}
|
||||
|
||||
const std::string& GetFirstAudioStreamCname(
|
||||
const SessionDescriptionInterface* desc) {
|
||||
const cricket::ContentInfo* audio_content =
|
||||
cricket::GetFirstAudioContent(desc->description());
|
||||
const cricket::AudioContentDescription* audio_desc =
|
||||
static_cast<const cricket::AudioContentDescription*>(
|
||||
audio_content->description);
|
||||
return audio_desc->streams()[0].cname;
|
||||
}
|
||||
|
||||
cricket::FakePortAllocator* port_allocator_ = nullptr;
|
||||
scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_;
|
||||
scoped_refptr<PeerConnectionInterface> pc_;
|
||||
@ -941,6 +969,27 @@ class PeerConnectionInterfaceTest : public testing::Test {
|
||||
rtc::scoped_refptr<StreamCollection> reference_collection_;
|
||||
};
|
||||
|
||||
// Generate different CNAMEs when PeerConnections are created.
|
||||
// The CNAMEs are expected to be generated randomly. It is possible
|
||||
// that the test fails, though the possibility is very low.
|
||||
TEST_F(PeerConnectionInterfaceTest, CnameGenerationInOffer) {
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> offer1 =
|
||||
CreateOfferWithOneAudioStream();
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> offer2 =
|
||||
CreateOfferWithOneAudioStream();
|
||||
EXPECT_NE(GetFirstAudioStreamCname(offer1.get()),
|
||||
GetFirstAudioStreamCname(offer2.get()));
|
||||
}
|
||||
|
||||
TEST_F(PeerConnectionInterfaceTest, CnameGenerationInAnswer) {
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> answer1 =
|
||||
CreateAnswerWithOneAudioStream();
|
||||
rtc::scoped_ptr<SessionDescriptionInterface> answer2 =
|
||||
CreateAnswerWithOneAudioStream();
|
||||
EXPECT_NE(GetFirstAudioStreamCname(answer1.get()),
|
||||
GetFirstAudioStreamCname(answer2.get()));
|
||||
}
|
||||
|
||||
TEST_F(PeerConnectionInterfaceTest,
|
||||
CreatePeerConnectionWithDifferentConfigurations) {
|
||||
CreatePeerConnectionWithDifferentConfigurations();
|
||||
|
||||
Reference in New Issue
Block a user