Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Unified Diff: talk/session/media/channel_unittest.cc

Issue 1363573002: Wire up transport sequence number / send time callbacks to webrtc via libjingle. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: More ios deps Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/session/media/channel_unittest.cc
diff --git a/talk/session/media/channel_unittest.cc b/talk/session/media/channel_unittest.cc
index b861d0a4efee8f76f6ba21073a4bb368581e8231..99462db6180215253a3d253169145545c412c650 100644
--- a/talk/session/media/channel_unittest.cc
+++ b/talk/session/media/channel_unittest.cc
@@ -33,7 +33,8 @@
#include "talk/media/base/rtpdump.h"
#include "talk/media/base/screencastid.h"
#include "talk/media/base/testutils.h"
-#include "webrtc/p2p/base/faketransportcontroller.h"
+#include "talk/media/webrtc/fakewebrtccall.h"
+#include "talk/app/webrtc/mediacontroller.h"
#include "talk/session/media/channel.h"
#include "webrtc/base/fileutils.h"
#include "webrtc/base/gunit.h"
@@ -44,6 +45,7 @@
#include "webrtc/base/ssladapter.h"
#include "webrtc/base/sslidentity.h"
#include "webrtc/base/window.h"
+#include "webrtc/p2p/base/faketransportcontroller.h"
#define MAYBE_SKIP_TEST(feature) \
if (!(rtc::SSLStreamAdapter::feature())) { \
@@ -119,6 +121,13 @@ rtc::StreamInterface* Open(const std::string& path) {
rtc::Pathname(path), "wb");
}
+class FakeCallFactory : public webrtc::CallFactory {
+ public:
+ webrtc::Call* CreateCall(const webrtc::Call::Config& config) override {
+ return new cricket::FakeCall(config);
+ }
+};
+
// Base class for Voice/VideoChannel tests
template<class T>
class ChannelTest : public testing::Test, public sigslot::has_slots<> {
@@ -134,6 +143,10 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
: verify_playout_(verify_playout),
transport_controller1_(cricket::ICEROLE_CONTROLLING),
transport_controller2_(cricket::ICEROLE_CONTROLLED),
+ media_controller_(
+ webrtc::MediaControllerInterface::Create(new FakeCallFactory(),
+ rtc::Thread::Current(),
+ nullptr)),
media_channel1_(NULL),
media_channel2_(NULL),
rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len),
@@ -157,6 +170,10 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
channel2_.reset(CreateChannel(thread, &media_engine_, ch2,
&transport_controller2_,
(flags2 & RTCP) != 0));
+ media_controller_->ConnectToSignalSentPacket_w(
+ channel1_->transport_channel());
+ media_controller_->ConnectToSignalSentPacket_w(
+ channel2_->transport_channel());
channel1_->SignalMediaMonitor.connect(
this, &ChannelTest<T>::OnMediaMonitor);
channel2_->SignalMediaMonitor.connect(
@@ -294,11 +311,21 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
bool SendRtp1() {
return media_channel1_->SendRtp(rtp_packet_.c_str(),
- static_cast<int>(rtp_packet_.size()));
+ static_cast<int>(rtp_packet_.size()),
+ rtc::PacketOptions());
+ }
+ bool SendRtpWithOptions1(const rtc::PacketOptions& options) {
+ return media_channel1_->SendRtp(
+ rtp_packet_.c_str(), static_cast<int>(rtp_packet_.size()), options);
}
bool SendRtp2() {
return media_channel2_->SendRtp(rtp_packet_.c_str(),
- static_cast<int>(rtp_packet_.size()));
+ static_cast<int>(rtp_packet_.size()),
+ rtc::PacketOptions());
+ }
+ bool SendRtpWithOptions2(const rtc::PacketOptions& options) {
+ return media_channel2_->SendRtp(
+ rtp_packet_.c_str(), static_cast<int>(rtp_packet_.size()), options);
}
bool SendRtcp1() {
return media_channel1_->SendRtcp(rtcp_packet_.c_str(),
@@ -311,13 +338,13 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
// Methods to send custom data.
bool SendCustomRtp1(uint32_t ssrc, int sequence_number, int pl_type = -1) {
std::string data(CreateRtpData(ssrc, sequence_number, pl_type));
- return media_channel1_->SendRtp(data.c_str(),
- static_cast<int>(data.size()));
+ return media_channel1_->SendRtp(data.c_str(), static_cast<int>(data.size()),
+ rtc::PacketOptions());
}
bool SendCustomRtp2(uint32_t ssrc, int sequence_number, int pl_type = -1) {
std::string data(CreateRtpData(ssrc, sequence_number, pl_type));
- return media_channel2_->SendRtp(data.c_str(),
- static_cast<int>(data.size()));
+ return media_channel2_->SendRtp(data.c_str(), static_cast<int>(data.size()),
+ rtc::PacketOptions());
}
bool SendCustomRtcp1(uint32_t ssrc) {
std::string data(CreateRtcpData(ssrc));
@@ -957,7 +984,8 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
public:
LastWordMediaChannel() : T::MediaChannel(NULL, typename T::Options()) {}
~LastWordMediaChannel() {
- T::MediaChannel::SendRtp(kPcmuFrame, sizeof(kPcmuFrame));
+ T::MediaChannel::SendRtp(kPcmuFrame, sizeof(kPcmuFrame),
+ rtc::PacketOptions());
T::MediaChannel::SendRtcp(kRtcpReport, sizeof(kRtcpReport));
}
};
@@ -986,6 +1014,32 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
EXPECT_TRUE(CheckNoRtp2());
}
+ // Send voice RTP data (with packet options) to the other side and ensure it
+ // gets there.
+ void SendRtpToRtpWithPacketIds() {
+ CreateChannels(0, 0);
+ EXPECT_TRUE(SendInitiate());
+ EXPECT_TRUE(SendAccept());
+ ASSERT_TRUE(GetTransport1());
+ ASSERT_TRUE(GetTransport2());
+ EXPECT_EQ(1U, GetTransport1()->channels().size());
+ EXPECT_EQ(1U, GetTransport2()->channels().size());
+ rtc::PacketOptions options1;
+ options1.packet_id = 10;
+ rtc::PacketOptions options2;
+ options2.packet_id = 30;
+ EXPECT_TRUE(SendRtpWithOptions1(options1));
+ cricket::FakeCall* call =
+ static_cast<cricket::FakeCall*>(media_controller_->call_w());
+ EXPECT_EQ(options1.packet_id, call->last_sent_packet().packet_id);
+ EXPECT_TRUE(SendRtpWithOptions2(options2));
+ EXPECT_EQ(options2.packet_id, call->last_sent_packet().packet_id);
+ EXPECT_TRUE(CheckRtp1());
+ EXPECT_TRUE(CheckRtp2());
+ EXPECT_TRUE(CheckNoRtp1());
+ EXPECT_TRUE(CheckNoRtp2());
+ }
+
// Check that RTCP is not transmitted if both sides don't support RTCP.
void SendNoRtcpToNoRtcp() {
CreateChannels(0, 0);
@@ -1709,21 +1763,24 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
&error_handler, &SrtpErrorHandler::OnSrtpError);
// Testing failures in sending packets.
- EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket)));
+ EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket),
+ rtc::PacketOptions()));
// The first failure will trigger an error.
EXPECT_EQ_WAIT(cricket::SrtpFilter::ERROR_FAIL, error_handler.error_, 500);
EXPECT_EQ(cricket::SrtpFilter::PROTECT, error_handler.mode_);
error_handler.error_ = cricket::SrtpFilter::ERROR_NONE;
error_handler.mode_ = cricket::SrtpFilter::UNPROTECT;
// The next 250 ms failures will not trigger an error.
- EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket)));
+ EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket),
+ rtc::PacketOptions()));
// Wait for a while to ensure no message comes in.
rtc::Thread::Current()->ProcessMessages(200);
EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_handler.error_);
EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, error_handler.mode_);
// Wait for a little more - the error will be triggered again.
rtc::Thread::Current()->ProcessMessages(200);
- EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket)));
+ EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket),
+ rtc::PacketOptions()));
EXPECT_EQ_WAIT(cricket::SrtpFilter::ERROR_FAIL, error_handler.error_, 500);
EXPECT_EQ(cricket::SrtpFilter::PROTECT, error_handler.mode_);
@@ -1791,6 +1848,7 @@ class ChannelTest : public testing::Test, public sigslot::has_slots<> {
cricket::FakeTransportController transport_controller1_;
cricket::FakeTransportController transport_controller2_;
cricket::FakeMediaEngine media_engine_;
+ rtc::scoped_ptr<webrtc::MediaControllerInterface> media_controller_;
// The media channels are owned by the voice channel objects below.
typename T::MediaChannel* media_channel1_;
typename T::MediaChannel* media_channel2_;
@@ -2536,6 +2594,10 @@ TEST_F(VideoChannelTest, TestOnReadyToSendWithRtcpMux) {
Base::TestOnReadyToSendWithRtcpMux();
}
+TEST_F(VideoChannelTest, OnSentPacketIsCalled) {
+ Base::SendRtpToRtpWithPacketIds();
+}
+
TEST_F(VideoChannelTest, TestApplyViewRequest) {
CreateChannels(0, 0);
cricket::StreamParams stream2;

Powered by Google App Engine
This is Rietveld 408576698