diff options
Diffstat (limited to 'app/webrtc/mediastreamsignaling_unittest.cc')
-rw-r--r-- | app/webrtc/mediastreamsignaling_unittest.cc | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/app/webrtc/mediastreamsignaling_unittest.cc b/app/webrtc/mediastreamsignaling_unittest.cc index fa83646..84f67b9 100644 --- a/app/webrtc/mediastreamsignaling_unittest.cc +++ b/app/webrtc/mediastreamsignaling_unittest.cc @@ -261,14 +261,20 @@ static bool CompareStreamCollections(StreamCollectionInterface* s1, class FakeDataChannelFactory : public webrtc::DataChannelFactory { public: FakeDataChannelFactory(FakeDataChannelProvider* provider, - cricket::DataChannelType dct) - : provider_(provider), type_(dct) {} + cricket::DataChannelType dct, + webrtc::MediaStreamSignaling* media_stream_signaling) + : provider_(provider), + type_(dct), + media_stream_signaling_(media_stream_signaling) {} virtual rtc::scoped_refptr<webrtc::DataChannel> CreateDataChannel( const std::string& label, const webrtc::InternalDataChannelInit* config) { last_init_ = *config; - return webrtc::DataChannel::Create(provider_, type_, label, *config); + rtc::scoped_refptr<webrtc::DataChannel> data_channel = + webrtc::DataChannel::Create(provider_, type_, label, *config); + media_stream_signaling_->AddDataChannel(data_channel); + return data_channel; } const webrtc::InternalDataChannelInit& last_init() const { @@ -278,6 +284,7 @@ class FakeDataChannelFactory : public webrtc::DataChannelFactory { private: FakeDataChannelProvider* provider_; cricket::DataChannelType type_; + webrtc::MediaStreamSignaling* media_stream_signaling_; webrtc::InternalDataChannelInit last_init_; }; @@ -775,8 +782,10 @@ TEST_F(MediaStreamSignalingTest, MediaConstraintsInAnswer) { RTCOfferAnswerOptions default_rtc_options; EXPECT_TRUE(signaling_->GetOptionsForOffer(default_rtc_options, &updated_offer_options)); - EXPECT_TRUE(updated_offer_options.has_audio); - EXPECT_TRUE(updated_offer_options.has_video); + // By default, |has_audio| or |has_video| are false if there is no media + // track. + EXPECT_FALSE(updated_offer_options.has_audio); + EXPECT_FALSE(updated_offer_options.has_video); } // This test verifies that the remote MediaStreams corresponding to a received @@ -1263,7 +1272,8 @@ TEST_F(MediaStreamSignalingTest, SctpDuplicatedLabelAllowed) { // message. TEST_F(MediaStreamSignalingTest, CreateDataChannelFromOpenMessage) { FakeDataChannelFactory fake_factory(data_channel_provider_.get(), - cricket::DCT_SCTP); + cricket::DCT_SCTP, + signaling_.get()); signaling_->SetDataChannelFactory(&fake_factory); webrtc::DataChannelInit config; config.id = 1; @@ -1283,7 +1293,8 @@ TEST_F(MediaStreamSignalingTest, DuplicatedLabelFromOpenMessageAllowed) { AddDataChannel(cricket::DCT_SCTP, "a", -1); FakeDataChannelFactory fake_factory(data_channel_provider_.get(), - cricket::DCT_SCTP); + cricket::DCT_SCTP, + signaling_.get()); signaling_->SetDataChannelFactory(&fake_factory); webrtc::DataChannelInit config; config.id = 0; @@ -1312,3 +1323,24 @@ TEST_F(MediaStreamSignalingTest, signaling_->OnRemoteSctpDataChannelClosed(config.id); EXPECT_EQ(webrtc::DataChannelInterface::kClosed, data_channel->state()); } + +// Verifies that DataChannel added from OPEN message is added to +// MediaStreamSignaling only once (webrtc issue 3778). +TEST_F(MediaStreamSignalingTest, DataChannelFromOpenMessageAddedOnce) { + FakeDataChannelFactory fake_factory(data_channel_provider_.get(), + cricket::DCT_SCTP, + signaling_.get()); + signaling_->SetDataChannelFactory(&fake_factory); + webrtc::DataChannelInit config; + config.id = 1; + rtc::Buffer payload; + webrtc::WriteDataChannelOpenMessage("a", config, &payload); + cricket::ReceiveDataParams params; + params.ssrc = config.id; + EXPECT_TRUE(signaling_->AddDataChannelFromOpenMessage(params, payload)); + EXPECT_TRUE(signaling_->HasDataChannels()); + + // Removes the DataChannel and verifies that no DataChannel is left. + signaling_->RemoveSctpDataChannel(config.id); + EXPECT_FALSE(signaling_->HasDataChannels()); +} |