Index: webrtc/api/webrtcsession_unittest.cc |
diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc |
index 7c26d1db57b3a8c44cd54d5fd30379af9d92ff87..116c8d57391da9ecd2d43cf250317d69221d84db 100644 |
--- a/webrtc/api/webrtcsession_unittest.cc |
+++ b/webrtc/api/webrtcsession_unittest.cc |
@@ -40,7 +40,6 @@ |
#include "webrtc/media/base/fakevideorenderer.h" |
#include "webrtc/media/base/mediachannel.h" |
#include "webrtc/media/engine/fakewebrtccall.h" |
-#include "webrtc/media/sctp/sctptransportinternal.h" |
#include "webrtc/p2p/base/packettransportinterface.h" |
#include "webrtc/p2p/base/stunserver.h" |
#include "webrtc/p2p/base/teststunserver.h" |
@@ -110,7 +109,6 @@ static const char kMediaContentName0[] = "audio"; |
static const int kMediaContentIndex1 = 1; |
static const char kMediaContentName1[] = "video"; |
-static const int kDefaultTimeout = 10000; // 10 seconds. |
static const int kIceCandidatesTimeout = 10000; |
// STUN timeout with all retransmissions is a total of 9500ms. |
static const int kStunTimeout = 9500; |
@@ -213,52 +211,6 @@ class MockIceObserver : public webrtc::IceObserver { |
size_t num_candidates_removed_ = 0; |
}; |
-// Used for tests in this file to verify that WebRtcSession responds to signals |
-// from the SctpTransport correctly, and calls Start with the correct |
-// local/remote ports. |
-class FakeSctpTransport : public cricket::SctpTransportInternal { |
- public: |
- void SetTransportChannel(cricket::TransportChannel* channel) override {} |
- bool Start(int local_port, int remote_port) override { |
- local_port_ = local_port; |
- remote_port_ = remote_port; |
- return true; |
- } |
- bool OpenStream(int sid) override { return true; } |
- bool ResetStream(int sid) override { return true; } |
- bool SendData(const cricket::SendDataParams& params, |
- const rtc::CopyOnWriteBuffer& payload, |
- cricket::SendDataResult* result = nullptr) override { |
- return true; |
- } |
- bool ReadyToSendData() override { return true; } |
- void set_debug_name_for_testing(const char* debug_name) override {} |
- |
- int local_port() const { return local_port_; } |
- int remote_port() const { return remote_port_; } |
- |
- private: |
- int local_port_ = -1; |
- int remote_port_ = -1; |
-}; |
- |
-class FakeSctpTransportFactory : public cricket::SctpTransportInternalFactory { |
- public: |
- std::unique_ptr<cricket::SctpTransportInternal> CreateSctpTransport( |
- cricket::TransportChannel*) override { |
- last_fake_sctp_transport_ = new FakeSctpTransport(); |
- return std::unique_ptr<cricket::SctpTransportInternal>( |
- last_fake_sctp_transport_); |
- } |
- |
- FakeSctpTransport* last_fake_sctp_transport() { |
- return last_fake_sctp_transport_; |
- } |
- |
- private: |
- FakeSctpTransport* last_fake_sctp_transport_ = nullptr; |
-}; |
- |
class WebRtcSessionForTest : public webrtc::WebRtcSession { |
public: |
WebRtcSessionForTest( |
@@ -268,15 +220,13 @@ class WebRtcSessionForTest : public webrtc::WebRtcSession { |
rtc::Thread* signaling_thread, |
cricket::PortAllocator* port_allocator, |
webrtc::IceObserver* ice_observer, |
- std::unique_ptr<cricket::TransportController> transport_controller, |
- std::unique_ptr<FakeSctpTransportFactory> sctp_factory) |
+ std::unique_ptr<cricket::TransportController> transport_controller) |
: WebRtcSession(media_controller, |
network_thread, |
worker_thread, |
signaling_thread, |
port_allocator, |
- std::move(transport_controller), |
- std::move(sctp_factory)) { |
+ std::move(transport_controller)) { |
RegisterIceObserver(ice_observer); |
} |
virtual ~WebRtcSessionForTest() {} |
@@ -299,6 +249,14 @@ class WebRtcSessionForTest : public webrtc::WebRtcSession { |
return rtcp_transport_channel(video_channel()); |
} |
+ rtc::PacketTransportInterface* data_rtp_transport_channel() { |
+ return rtp_transport_channel(data_channel()); |
+ } |
+ |
+ rtc::PacketTransportInterface* data_rtcp_transport_channel() { |
+ return rtcp_transport_channel(data_channel()); |
+ } |
+ |
private: |
rtc::PacketTransportInterface* rtp_transport_channel( |
cricket::BaseChannel* ch) { |
@@ -428,16 +386,13 @@ class WebRtcSessionTest |
std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator, |
PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) { |
ASSERT_TRUE(session_.get() == NULL); |
- fake_sctp_transport_factory_ = new FakeSctpTransportFactory(); |
session_.reset(new WebRtcSessionForTest( |
media_controller_.get(), rtc::Thread::Current(), rtc::Thread::Current(), |
rtc::Thread::Current(), allocator_.get(), &observer_, |
std::unique_ptr<cricket::TransportController>( |
new cricket::TransportController(rtc::Thread::Current(), |
rtc::Thread::Current(), |
- allocator_.get())), |
- std::unique_ptr<FakeSctpTransportFactory>( |
- fake_sctp_transport_factory_))); |
+ allocator_.get())))); |
session_->SignalDataChannelOpenMessage.connect( |
this, &WebRtcSessionTest::OnDataChannelOpenMessage); |
session_->GetOnDestroyedSignal()->connect( |
@@ -1541,8 +1496,6 @@ class WebRtcSessionTest |
webrtc::RtcEventLogNullImpl event_log_; |
cricket::FakeMediaEngine* media_engine_; |
cricket::FakeDataEngine* data_engine_; |
- // Actually owned by session_. |
- FakeSctpTransportFactory* fake_sctp_transport_factory_ = nullptr; |
std::unique_ptr<cricket::ChannelManager> channel_manager_; |
cricket::FakeCall fake_call_; |
std::unique_ptr<webrtc::MediaControllerInterface> media_controller_; |
@@ -3922,7 +3875,7 @@ TEST_F(WebRtcSessionTest, TestRtpDataChannel) { |
Init(); |
SetLocalDescriptionWithDataChannel(); |
ASSERT_TRUE(data_engine_); |
- EXPECT_NE(nullptr, data_engine_->GetChannel(0)); |
+ EXPECT_EQ(cricket::DCT_RTP, data_engine_->last_channel_type()); |
} |
TEST_P(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { |
@@ -3934,43 +3887,7 @@ TEST_P(WebRtcSessionTest, TestRtpDataChannelConstraintTakesPrecedence) { |
InitWithDtls(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
- EXPECT_NE(nullptr, data_engine_->GetChannel(0)); |
-} |
- |
-// Test that sctp_content_name/sctp_transport_name (used for stats) are correct |
-// before and after BUNDLE is negotiated. |
-TEST_P(WebRtcSessionTest, SctpContentAndTransportName) { |
- MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
- SetFactoryDtlsSrtp(); |
- InitWithDtls(GetParam()); |
- |
- // Initially these fields should be empty. |
- EXPECT_FALSE(session_->sctp_content_name()); |
- EXPECT_FALSE(session_->sctp_transport_name()); |
- |
- // Create offer with audio/video/data. |
- // Default bundle policy is "balanced", so data should be using its own |
- // transport. |
- SendAudioVideoStream1(); |
- CreateDataChannel(); |
- InitiateCall(); |
- ASSERT_TRUE(session_->sctp_content_name()); |
- ASSERT_TRUE(session_->sctp_transport_name()); |
- EXPECT_EQ("data", *session_->sctp_content_name()); |
- EXPECT_EQ("data", *session_->sctp_transport_name()); |
- |
- // Create answer that finishes BUNDLE negotiation, which means everything |
- // should be bundled on the first transport (audio). |
- cricket::MediaSessionOptions answer_options; |
- answer_options.recv_video = true; |
- answer_options.bundle_enabled = true; |
- answer_options.data_channel_type = cricket::DCT_SCTP; |
- SetRemoteDescriptionWithoutError(CreateRemoteAnswer( |
- session_->local_description(), answer_options, cricket::SEC_DISABLED)); |
- ASSERT_TRUE(session_->sctp_content_name()); |
- ASSERT_TRUE(session_->sctp_transport_name()); |
- EXPECT_EQ("data", *session_->sctp_content_name()); |
- EXPECT_EQ("audio", *session_->sctp_transport_name()); |
+ EXPECT_EQ(cricket::DCT_RTP, data_engine_->last_channel_type()); |
} |
TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { |
@@ -4002,39 +3919,30 @@ TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { |
EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL); |
} |
-// Test that if DTLS is disabled, we don't end up with an SctpTransport |
-// created (or an RtpDataChannel). |
TEST_P(WebRtcSessionTest, TestSctpDataChannelWithoutDtls) { |
configuration_.enable_dtls_srtp = rtc::Optional<bool>(false); |
InitWithDtls(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
- EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
- EXPECT_EQ(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
+ EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type()); |
} |
-// Test that if DTLS is enabled, we end up with an SctpTransport created |
-// (and not an RtpDataChannel). |
TEST_P(WebRtcSessionTest, TestSctpDataChannelWithDtls) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
InitWithDtls(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
- EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
- EXPECT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
+ EXPECT_EQ(cricket::DCT_SCTP, data_engine_->last_channel_type()); |
} |
-// Test that if SCTP is disabled, we don't end up with an SctpTransport |
-// created (or an RtpDataChannel). |
TEST_P(WebRtcSessionTest, TestDisableSctpDataChannels) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
options_.disable_sctp_data_channels = true; |
InitWithDtls(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
- EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
- EXPECT_EQ(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
+ EXPECT_EQ(cricket::DCT_NONE, data_engine_->last_channel_type()); |
} |
TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { |
@@ -4065,19 +3973,31 @@ TEST_P(WebRtcSessionTest, TestSctpDataChannelSendPortParsing) { |
// TEST PLAN: Set the port number to something new, set it in the SDP, |
// and pass it all the way down. |
- EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
+ EXPECT_EQ(cricket::DCT_SCTP, data_engine_->last_channel_type()); |
CreateDataChannel(); |
- ASSERT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
- EXPECT_EQ( |
- new_recv_port, |
- fake_sctp_transport_factory_->last_fake_sctp_transport()->local_port()); |
- EXPECT_EQ( |
- new_send_port, |
- fake_sctp_transport_factory_->last_fake_sctp_transport()->remote_port()); |
+ |
+ cricket::FakeDataMediaChannel* ch = data_engine_->GetChannel(0); |
+ int portnum = -1; |
+ ASSERT_TRUE(ch != NULL); |
+ ASSERT_EQ(1UL, ch->send_codecs().size()); |
+ EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->send_codecs()[0].id); |
+ EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName, |
+ ch->send_codecs()[0].name.c_str())); |
+ EXPECT_TRUE(ch->send_codecs()[0].GetParam(cricket::kCodecParamPort, |
+ &portnum)); |
+ EXPECT_EQ(new_send_port, portnum); |
+ |
+ ASSERT_EQ(1UL, ch->recv_codecs().size()); |
+ EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->recv_codecs()[0].id); |
+ EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName, |
+ ch->recv_codecs()[0].name.c_str())); |
+ EXPECT_TRUE(ch->recv_codecs()[0].GetParam(cricket::kCodecParamPort, |
+ &portnum)); |
+ EXPECT_EQ(new_recv_port, portnum); |
} |
-// Verifies that when a session's SctpTransport receives an OPEN message, |
-// WebRtcSession signals the SctpTransport creation request with the expected |
+// Verifies that when a session's DataChannel receives an OPEN message, |
+// WebRtcSession signals the DataChannel creation request with the expected |
// config. |
TEST_P(WebRtcSessionTest, TestSctpDataChannelOpenMessage) { |
MAYBE_SKIP_TEST(rtc::SSLStreamAdapter::HaveDtlsSrtp); |
@@ -4085,10 +4005,8 @@ TEST_P(WebRtcSessionTest, TestSctpDataChannelOpenMessage) { |
InitWithDtls(GetParam()); |
SetLocalDescriptionWithDataChannel(); |
- EXPECT_EQ(nullptr, data_engine_->GetChannel(0)); |
- ASSERT_NE(nullptr, fake_sctp_transport_factory_->last_fake_sctp_transport()); |
+ EXPECT_EQ(cricket::DCT_SCTP, data_engine_->last_channel_type()); |
- // Make the fake SCTP transport pretend it received an OPEN message. |
webrtc::DataChannelInit config; |
config.id = 1; |
rtc::CopyOnWriteBuffer payload; |
@@ -4096,10 +4014,11 @@ TEST_P(WebRtcSessionTest, TestSctpDataChannelOpenMessage) { |
cricket::ReceiveDataParams params; |
params.ssrc = config.id; |
params.type = cricket::DMT_CONTROL; |
- fake_sctp_transport_factory_->last_fake_sctp_transport()->SignalDataReceived( |
- params, payload); |
- EXPECT_EQ_WAIT("a", last_data_channel_label_, kDefaultTimeout); |
+ cricket::DataChannel* data_channel = session_->data_channel(); |
+ data_channel->SignalDataReceived(data_channel, params, payload); |
+ |
+ EXPECT_EQ("a", last_data_channel_label_); |
EXPECT_EQ(config.id, last_data_channel_config_.id); |
EXPECT_FALSE(last_data_channel_config_.negotiated); |
EXPECT_EQ(webrtc::InternalDataChannelInit::kAcker, |