Reland "Make cricket::SctpTransportInternalFactory injectable through PeerConnectionFactory Deps"
This is to allow testing without using the singleton sctp library.
cricket::SctpTransportInternalFactory is renamed to webrtc::SctpTransportFactoryInterface and moved to the API folder to follow the API structure.
Tests can use test/pc/sctp/fake_sctp_transport.h to inject a faked data channel implementation.
patch 1 contain the original cl.
patch 2 modifications
Bug: none
Change-Id: Ic088da3eb7d9aada79e6d601dbf2d1aa2be777f6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182840
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32024}
diff --git a/pc/peer_connection_data_channel_unittest.cc b/pc/peer_connection_data_channel_unittest.cc
index 0a674f4..6c51f01 100644
--- a/pc/peer_connection_data_channel_unittest.cc
+++ b/pc/peer_connection_data_channel_unittest.cc
@@ -45,8 +45,8 @@
#ifdef WEBRTC_ANDROID
#include "pc/test/android_test_initializer.h"
#endif
-#include "pc/test/fake_sctp_transport.h"
#include "rtc_base/virtual_socket_server.h"
+#include "test/pc/sctp/fake_sctp_transport.h"
namespace webrtc {
@@ -58,46 +58,20 @@
namespace {
-PeerConnectionFactoryDependencies CreatePeerConnectionFactoryDependencies(
- rtc::Thread* network_thread,
- rtc::Thread* worker_thread,
- rtc::Thread* signaling_thread,
- std::unique_ptr<cricket::MediaEngineInterface> media_engine,
- std::unique_ptr<CallFactoryInterface> call_factory) {
+PeerConnectionFactoryDependencies CreatePeerConnectionFactoryDependencies() {
PeerConnectionFactoryDependencies deps;
- deps.network_thread = network_thread;
- deps.worker_thread = worker_thread;
- deps.signaling_thread = signaling_thread;
+ deps.network_thread = rtc::Thread::Current();
+ deps.worker_thread = rtc::Thread::Current();
+ deps.signaling_thread = rtc::Thread::Current();
deps.task_queue_factory = CreateDefaultTaskQueueFactory();
- deps.media_engine = std::move(media_engine);
- deps.call_factory = std::move(call_factory);
+ deps.media_engine = std::make_unique<cricket::FakeMediaEngine>();
+ deps.call_factory = CreateCallFactory();
+ deps.sctp_factory = std::make_unique<FakeSctpTransportFactory>();
return deps;
}
} // namespace
-class PeerConnectionFactoryForDataChannelTest
- : public rtc::RefCountedObject<PeerConnectionFactory> {
- public:
- PeerConnectionFactoryForDataChannelTest()
- : rtc::RefCountedObject<PeerConnectionFactory>(
- CreatePeerConnectionFactoryDependencies(
- rtc::Thread::Current(),
- rtc::Thread::Current(),
- rtc::Thread::Current(),
- std::make_unique<cricket::FakeMediaEngine>(),
- CreateCallFactory())) {}
-
- std::unique_ptr<cricket::SctpTransportInternalFactory>
- CreateSctpTransportInternalFactory() {
- auto factory = std::make_unique<FakeSctpTransportFactory>();
- last_fake_sctp_transport_factory_ = factory.get();
- return factory;
- }
-
- FakeSctpTransportFactory* last_fake_sctp_transport_factory_ = nullptr;
-};
-
class PeerConnectionWrapperForDataChannelTest : public PeerConnectionWrapper {
public:
using PeerConnectionWrapper::PeerConnectionWrapper;
@@ -155,10 +129,12 @@
WrapperPtr CreatePeerConnection(
const RTCConfiguration& config,
const PeerConnectionFactoryInterface::Options factory_options) {
- rtc::scoped_refptr<PeerConnectionFactoryForDataChannelTest> pc_factory(
- new PeerConnectionFactoryForDataChannelTest());
+ auto factory_deps = CreatePeerConnectionFactoryDependencies();
+ FakeSctpTransportFactory* fake_sctp_transport_factory =
+ static_cast<FakeSctpTransportFactory*>(factory_deps.sctp_factory.get());
+ rtc::scoped_refptr<PeerConnectionFactoryInterface> pc_factory =
+ CreateModularPeerConnectionFactory(std::move(factory_deps));
pc_factory->SetOptions(factory_options);
- RTC_CHECK(pc_factory->Initialize());
auto observer = std::make_unique<MockPeerConnectionObserver>();
RTCConfiguration modified_config = config;
modified_config.sdp_semantics = sdp_semantics_;
@@ -171,9 +147,7 @@
observer->SetPeerConnectionInterface(pc.get());
auto wrapper = std::make_unique<PeerConnectionWrapperForDataChannelTest>(
pc_factory, pc, std::move(observer));
- RTC_DCHECK(pc_factory->last_fake_sctp_transport_factory_);
- wrapper->set_sctp_transport_factory(
- pc_factory->last_fake_sctp_transport_factory_);
+ wrapper->set_sctp_transport_factory(fake_sctp_transport_factory);
return wrapper;
}