| Index: webrtc/api/peerconnectioninterface_unittest.cc
|
| diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc
|
| index 71233e06081fc5d703712aaf3b6b2bcdb3be61c9..f9c93c4b3a9fa84ee4c0e4511560af752306a09f 100644
|
| --- a/webrtc/api/peerconnectioninterface_unittest.cc
|
| +++ b/webrtc/api/peerconnectioninterface_unittest.cc
|
| @@ -40,6 +40,7 @@
|
| #include "webrtc/media/base/fakevideocapturer.h"
|
| #include "webrtc/media/sctp/sctpdataengine.h"
|
| #include "webrtc/p2p/base/fakeportallocator.h"
|
| +#include "webrtc/p2p/base/faketransportcontroller.h"
|
| #include "webrtc/pc/mediasession.h"
|
|
|
| static const char kStreamLabel1[] = "local_stream_1";
|
| @@ -491,11 +492,13 @@ class MockPeerConnectionObserver : public PeerConnectionObserver {
|
| void OnIceConnectionChange(
|
| PeerConnectionInterface::IceConnectionState new_state) override {
|
| EXPECT_EQ(pc_->ice_connection_state(), new_state);
|
| + callback_triggered = true;
|
| }
|
| void OnIceGatheringChange(
|
| PeerConnectionInterface::IceGatheringState new_state) override {
|
| EXPECT_EQ(pc_->ice_gathering_state(), new_state);
|
| ice_complete_ = new_state == PeerConnectionInterface::kIceGatheringComplete;
|
| + callback_triggered = true;
|
| }
|
| void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override {
|
| EXPECT_NE(PeerConnectionInterface::kIceGatheringNew,
|
| @@ -507,6 +510,16 @@ class MockPeerConnectionObserver : public PeerConnectionObserver {
|
| last_candidate_.reset(webrtc::CreateIceCandidate(candidate->sdp_mid(),
|
| candidate->sdp_mline_index(), sdp, NULL));
|
| EXPECT_TRUE(last_candidate_.get() != NULL);
|
| + callback_triggered = true;
|
| + }
|
| +
|
| + void OnIceCandidatesRemoved(
|
| + const std::vector<cricket::Candidate>& candidates) override {
|
| + callback_triggered = true;
|
| + }
|
| +
|
| + void OnIceConnectionReceivingChange(bool receiving) override {
|
| + callback_triggered = true;
|
| }
|
|
|
| // Returns the label of the last added stream.
|
| @@ -529,6 +542,7 @@ class MockPeerConnectionObserver : public PeerConnectionObserver {
|
| rtc::scoped_refptr<StreamCollection> remote_streams_;
|
| bool renegotiation_needed_ = false;
|
| bool ice_complete_ = false;
|
| + bool callback_triggered = false;
|
|
|
| private:
|
| scoped_refptr<MediaStreamInterface> last_added_stream_;
|
| @@ -537,6 +551,36 @@ class MockPeerConnectionObserver : public PeerConnectionObserver {
|
|
|
| } // namespace
|
|
|
| +// The PeerConnectionMediaConfig tests below verify that configuration
|
| +// and constraints are propagated into the MediaConfig passed to
|
| +// CreateMediaController. These settings are intended for MediaChannel
|
| +// constructors, but that is not exercised by these unittest.
|
| +class PeerConnectionFactoryForTest : public webrtc::PeerConnectionFactory {
|
| + public:
|
| + webrtc::MediaControllerInterface* CreateMediaController(
|
| + const cricket::MediaConfig& config) const override {
|
| + create_media_controller_called_ = true;
|
| + create_media_controller_config_ = config;
|
| +
|
| + webrtc::MediaControllerInterface* mc =
|
| + PeerConnectionFactory::CreateMediaController(config);
|
| + EXPECT_TRUE(mc != nullptr);
|
| + return mc;
|
| + }
|
| +
|
| + cricket::TransportController* CreateTransportController(
|
| + cricket::PortAllocator* port_allocator) override {
|
| + transport_controller = new cricket::TransportController(
|
| + rtc::Thread::Current(), rtc::Thread::Current(), port_allocator);
|
| + return transport_controller;
|
| + }
|
| +
|
| + cricket::TransportController* transport_controller;
|
| + // Mutable, so they can be modified in the above const-declared method.
|
| + mutable bool create_media_controller_called_ = false;
|
| + mutable cricket::MediaConfig create_media_controller_config_;
|
| +};
|
| +
|
| class PeerConnectionInterfaceTest : public testing::Test {
|
| protected:
|
| PeerConnectionInterfaceTest() {
|
| @@ -550,6 +594,9 @@ class PeerConnectionInterfaceTest : public testing::Test {
|
| rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
|
| nullptr, nullptr, nullptr);
|
| ASSERT_TRUE(pc_factory_);
|
| + pc_factory_for_test_ =
|
| + new rtc::RefCountedObject<PeerConnectionFactoryForTest>();
|
| + pc_factory_for_test_->Initialize();
|
| }
|
|
|
| void CreatePeerConnection() {
|
| @@ -732,7 +779,9 @@ class PeerConnectionInterfaceTest : public testing::Test {
|
| } else {
|
| pc_->SetRemoteDescription(observer, desc);
|
| }
|
| - EXPECT_EQ_WAIT(true, observer->called(), kTimeout);
|
| + if (pc_->signaling_state() != PeerConnectionInterface::kClosed) {
|
| + EXPECT_EQ_WAIT(true, observer->called(), kTimeout);
|
| + }
|
| return observer->result();
|
| }
|
|
|
| @@ -994,11 +1043,37 @@ class PeerConnectionInterfaceTest : public testing::Test {
|
|
|
| cricket::FakePortAllocator* port_allocator_ = nullptr;
|
| scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_;
|
| + scoped_refptr<PeerConnectionFactoryForTest> pc_factory_for_test_;
|
| scoped_refptr<PeerConnectionInterface> pc_;
|
| MockPeerConnectionObserver observer_;
|
| rtc::scoped_refptr<StreamCollection> reference_collection_;
|
| };
|
|
|
| +// Test that no callbacks on the PeerConnectionObserver are called after the
|
| +// PeerConnection is closed.
|
| +TEST_F(PeerConnectionInterfaceTest, CloseAndTestCallbackFunctions) {
|
| + scoped_refptr<PeerConnectionInterface> pc(
|
| + pc_factory_for_test_->CreatePeerConnection(
|
| + PeerConnectionInterface::RTCConfiguration(), nullptr, nullptr,
|
| + nullptr, &observer_));
|
| + observer_.SetPeerConnectionInterface(pc.get());
|
| + pc->Close();
|
| +
|
| + // No callbacks is expected to be called.
|
| + observer_.callback_triggered = false;
|
| + std::vector<cricket::Candidate> candidates;
|
| + pc_factory_for_test_->transport_controller->SignalGatheringState(
|
| + cricket::IceGatheringState{});
|
| + pc_factory_for_test_->transport_controller->SignalCandidatesGathered(
|
| + "", candidates);
|
| + pc_factory_for_test_->transport_controller->SignalConnectionState(
|
| + cricket::IceConnectionState{});
|
| + pc_factory_for_test_->transport_controller->SignalCandidatesRemoved(
|
| + candidates);
|
| + pc_factory_for_test_->transport_controller->SignalReceiving(false);
|
| + EXPECT_FALSE(observer_.callback_triggered);
|
| +}
|
| +
|
| // 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.
|
| @@ -2533,28 +2608,6 @@ TEST_F(PeerConnectionInterfaceTest,
|
| EXPECT_TRUE(ContainsSender(new_senders, kVideoTracks[0], kStreams[1]));
|
| }
|
|
|
| -// The PeerConnectionMediaConfig tests below verify that configuration
|
| -// and constraints are propagated into the MediaConfig passed to
|
| -// CreateMediaController. These settings are intended for MediaChannel
|
| -// constructors, but that is not exercised by these unittest.
|
| -class PeerConnectionFactoryForTest : public webrtc::PeerConnectionFactory {
|
| - public:
|
| - webrtc::MediaControllerInterface* CreateMediaController(
|
| - const cricket::MediaConfig& config) const override {
|
| - create_media_controller_called_ = true;
|
| - create_media_controller_config_ = config;
|
| -
|
| - webrtc::MediaControllerInterface* mc =
|
| - PeerConnectionFactory::CreateMediaController(config);
|
| - EXPECT_TRUE(mc != nullptr);
|
| - return mc;
|
| - }
|
| -
|
| - // Mutable, so they can be modified in the above const-declared method.
|
| - mutable bool create_media_controller_called_ = false;
|
| - mutable cricket::MediaConfig create_media_controller_config_;
|
| -};
|
| -
|
| class PeerConnectionMediaConfigTest : public testing::Test {
|
| protected:
|
| void SetUp() override {
|
|
|