Index: media/cast/net/cast_transport_sender_impl_unittest.cc |
diff --git a/media/cast/net/cast_transport_sender_impl_unittest.cc b/media/cast/net/cast_transport_sender_impl_unittest.cc |
index db6c5df65d46b91d6548873081b7331ca544f827..f2e9d5cd8469c90d5cf6058af34ebd53e21da02f 100644 |
--- a/media/cast/net/cast_transport_sender_impl_unittest.cc |
+++ b/media/cast/net/cast_transport_sender_impl_unittest.cc |
@@ -23,9 +23,11 @@ namespace media { |
namespace cast { |
namespace { |
+ |
const int64_t kStartMillisecond = INT64_C(12345678900000); |
const uint32_t kVideoSsrc = 1; |
const uint32_t kAudioSsrc = 2; |
+ |
} // namespace |
class FakePacketSender : public PacketSender { |
@@ -46,6 +48,11 @@ class FakePacketSender : public PacketSender { |
int64_t GetBytesSent() final { return bytes_sent_; } |
+ void StartReceiving( |
+ const PacketReceiverCallbackWithStatus& packet_receiver) final {} |
+ |
+ void StopReceiving() final {} |
+ |
void SetPaused(bool paused) { |
paused_ = paused; |
if (!paused && stored_packet_.get()) { |
@@ -67,6 +74,9 @@ class FakePacketSender : public PacketSender { |
}; |
class CastTransportSenderImplTest : public ::testing::Test { |
+ public: |
+ void ReceivedLoggingEvents() { num_times_logging_callback_called_++; } |
+ |
protected: |
CastTransportSenderImplTest() : num_times_logging_callback_called_(0) { |
testing_clock_.Advance( |
@@ -76,62 +86,16 @@ class CastTransportSenderImplTest : public ::testing::Test { |
~CastTransportSenderImplTest() override {} |
- void InitWithoutLogging() { |
- transport_sender_.reset( |
- new CastTransportSenderImpl(NULL, |
- &testing_clock_, |
- net::IPEndPoint(), |
- net::IPEndPoint(), |
- make_scoped_ptr(new base::DictionaryValue), |
- base::Bind(&UpdateCastTransportStatus), |
- BulkRawEventsCallback(), |
- base::TimeDelta(), |
- task_runner_, |
- PacketReceiverCallback(), |
- &transport_)); |
- task_runner_->RunTasks(); |
- } |
- |
- void InitWithOptions() { |
- scoped_ptr<base::DictionaryValue> options( |
- new base::DictionaryValue); |
- options->SetBoolean("DHCP", true); |
- options->SetBoolean("disable_wifi_scan", true); |
- options->SetBoolean("media_streaming_mode", true); |
- options->SetInteger("pacer_target_burst_size", 20); |
- options->SetInteger("pacer_max_burst_size", 100); |
- transport_sender_.reset(new CastTransportSenderImpl( |
- NULL, &testing_clock_, net::IPEndPoint(), net::IPEndPoint(), |
- std::move(options), base::Bind(&UpdateCastTransportStatus), |
- BulkRawEventsCallback(), base::TimeDelta(), task_runner_, |
- PacketReceiverCallback(), &transport_)); |
- task_runner_->RunTasks(); |
- } |
- |
- void InitWithLogging() { |
- transport_sender_.reset(new CastTransportSenderImpl( |
- NULL, |
- &testing_clock_, |
- net::IPEndPoint(), |
- net::IPEndPoint(), |
- make_scoped_ptr(new base::DictionaryValue), |
- base::Bind(&UpdateCastTransportStatus), |
- base::Bind(&CastTransportSenderImplTest::LogRawEvents, |
- base::Unretained(this)), |
- base::TimeDelta::FromMilliseconds(10), |
- task_runner_, |
- PacketReceiverCallback(), |
- &transport_)); |
- task_runner_->RunTasks(); |
- } |
+ void InitWithoutLogging(); |
+ void InitWithOptions(); |
+ void InitWithLogging(); |
void InitializeVideo() { |
CastTransportRtpConfig rtp_config; |
rtp_config.ssrc = kVideoSsrc; |
rtp_config.feedback_ssrc = 2; |
rtp_config.rtp_payload_type = 3; |
- transport_sender_->InitializeVideo(rtp_config, |
- RtcpCastMessageCallback(), |
+ transport_sender_->InitializeVideo(rtp_config, RtcpCastMessageCallback(), |
RtcpRttCallback()); |
} |
@@ -140,26 +104,75 @@ class CastTransportSenderImplTest : public ::testing::Test { |
rtp_config.ssrc = kAudioSsrc; |
rtp_config.feedback_ssrc = 3; |
rtp_config.rtp_payload_type = 4; |
- transport_sender_->InitializeAudio(rtp_config, |
- RtcpCastMessageCallback(), |
+ transport_sender_->InitializeAudio(rtp_config, RtcpCastMessageCallback(), |
RtcpRttCallback()); |
} |
- void LogRawEvents(scoped_ptr<std::vector<FrameEvent>> frame_events, |
- scoped_ptr<std::vector<PacketEvent>> packet_events) { |
- num_times_logging_callback_called_++; |
- } |
- |
- static void UpdateCastTransportStatus(CastTransportStatus status) { |
- } |
- |
base::SimpleTestTickClock testing_clock_; |
scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
scoped_ptr<CastTransportSenderImpl> transport_sender_; |
- FakePacketSender transport_; |
+ FakePacketSender* transport_; // Owned by CastTransportSender. |
int num_times_logging_callback_called_; |
}; |
+namespace { |
+ |
+class TransportClient : public CastTransportSender::Client { |
+ public: |
+ explicit TransportClient( |
+ CastTransportSenderImplTest* cast_transport_sender_impl_test) |
+ : cast_transport_sender_impl_test_(cast_transport_sender_impl_test) {} |
+ |
+ void OnStatusChanged(CastTransportStatus status) final{}; |
+ void OnLoggingEventsReceived( |
+ scoped_ptr<std::vector<FrameEvent>> frame_events, |
+ scoped_ptr<std::vector<PacketEvent>> packet_events) final { |
+ CHECK(cast_transport_sender_impl_test_); |
+ cast_transport_sender_impl_test_->ReceivedLoggingEvents(); |
+ }; |
+ void ProcessRtpPacket(scoped_ptr<Packet> packet) final{}; |
+ |
+ private: |
+ CastTransportSenderImplTest* const cast_transport_sender_impl_test_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TransportClient); |
+}; |
+ |
+} // namespace |
+ |
+void CastTransportSenderImplTest::InitWithoutLogging() { |
+ transport_ = new FakePacketSender(); |
+ transport_sender_.reset( |
+ new CastTransportSenderImpl(&testing_clock_, base::TimeDelta(), |
+ make_scoped_ptr(new TransportClient(nullptr)), |
+ make_scoped_ptr(transport_), task_runner_)); |
+ task_runner_->RunTasks(); |
+} |
+ |
+void CastTransportSenderImplTest::InitWithOptions() { |
+ scoped_ptr<base::DictionaryValue> options(new base::DictionaryValue); |
+ options->SetBoolean("disable_wifi_scan", true); |
+ options->SetBoolean("media_streaming_mode", true); |
+ options->SetInteger("pacer_target_burst_size", 20); |
+ options->SetInteger("pacer_max_burst_size", 100); |
+ transport_ = new FakePacketSender(); |
+ transport_sender_.reset( |
+ new CastTransportSenderImpl(&testing_clock_, base::TimeDelta(), |
+ make_scoped_ptr(new TransportClient(nullptr)), |
+ make_scoped_ptr(transport_), task_runner_)); |
+ transport_sender_->SetOptions(*options); |
+ task_runner_->RunTasks(); |
+} |
+ |
+void CastTransportSenderImplTest::InitWithLogging() { |
+ transport_ = new FakePacketSender(); |
+ transport_sender_.reset(new CastTransportSenderImpl( |
+ &testing_clock_, base::TimeDelta::FromMilliseconds(10), |
+ make_scoped_ptr(new TransportClient(this)), make_scoped_ptr(transport_), |
+ task_runner_)); |
+ task_runner_->RunTasks(); |
+} |
+ |
TEST_F(CastTransportSenderImplTest, InitWithoutLogging) { |
InitWithoutLogging(); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(50)); |
@@ -187,7 +200,7 @@ TEST_F(CastTransportSenderImplTest, NacksCancelRetransmits) { |
transport_sender_->InsertFrame(kVideoSsrc, fake_frame); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
- EXPECT_EQ(4, transport_.packets_sent()); |
+ EXPECT_EQ(4, transport_->packets_sent()); |
EXPECT_EQ(1, num_times_logging_callback_called_); |
// Resend packet 0. |
@@ -196,7 +209,7 @@ TEST_F(CastTransportSenderImplTest, NacksCancelRetransmits) { |
missing_packets[1].insert(1); |
missing_packets[1].insert(2); |
- transport_.SetPaused(true); |
+ transport_->SetPaused(true); |
DedupInfo dedup_info; |
dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(10); |
transport_sender_->ResendPackets( |
@@ -212,13 +225,13 @@ TEST_F(CastTransportSenderImplTest, NacksCancelRetransmits) { |
transport_sender_->OnReceivedCastMessage(kVideoSsrc, |
RtcpCastMessageCallback(), |
cast_message); |
- transport_.SetPaused(false); |
+ transport_->SetPaused(false); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
EXPECT_EQ(3, num_times_logging_callback_called_); |
// Resend one packet in the socket when unpaused. |
// Resend one more packet from NACK. |
- EXPECT_EQ(6, transport_.packets_sent()); |
+ EXPECT_EQ(6, transport_->packets_sent()); |
} |
TEST_F(CastTransportSenderImplTest, CancelRetransmits) { |
@@ -236,14 +249,14 @@ TEST_F(CastTransportSenderImplTest, CancelRetransmits) { |
transport_sender_->InsertFrame(kVideoSsrc, fake_frame); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
- EXPECT_EQ(4, transport_.packets_sent()); |
+ EXPECT_EQ(4, transport_->packets_sent()); |
EXPECT_EQ(1, num_times_logging_callback_called_); |
// Resend all packets for frame 1. |
MissingFramesAndPacketsMap missing_packets; |
missing_packets[1].insert(kRtcpCastAllPacketsLost); |
- transport_.SetPaused(true); |
+ transport_->SetPaused(true); |
DedupInfo dedup_info; |
dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(10); |
transport_sender_->ResendPackets( |
@@ -256,12 +269,12 @@ TEST_F(CastTransportSenderImplTest, CancelRetransmits) { |
cancel_sending_frames.push_back(1); |
transport_sender_->CancelSendingFrames(kVideoSsrc, |
cancel_sending_frames); |
- transport_.SetPaused(false); |
+ transport_->SetPaused(false); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
EXPECT_EQ(2, num_times_logging_callback_called_); |
// Resend one packet in the socket when unpaused. |
- EXPECT_EQ(5, transport_.packets_sent()); |
+ EXPECT_EQ(5, transport_->packets_sent()); |
} |
TEST_F(CastTransportSenderImplTest, Kickstart) { |
@@ -277,12 +290,12 @@ TEST_F(CastTransportSenderImplTest, Kickstart) { |
fake_frame.dependency = EncodedFrame::KEY; |
fake_frame.data.resize(5000, ' '); |
- transport_.SetPaused(true); |
+ transport_->SetPaused(true); |
transport_sender_->InsertFrame(kVideoSsrc, fake_frame); |
transport_sender_->ResendFrameForKickstart(kVideoSsrc, 1); |
- transport_.SetPaused(false); |
+ transport_->SetPaused(false); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
- EXPECT_EQ(4, transport_.packets_sent()); |
+ EXPECT_EQ(4, transport_->packets_sent()); |
EXPECT_EQ(1, num_times_logging_callback_called_); |
// Resend 2 packets for frame 1. |
@@ -290,19 +303,19 @@ TEST_F(CastTransportSenderImplTest, Kickstart) { |
missing_packets[1].insert(0); |
missing_packets[1].insert(1); |
- transport_.SetPaused(true); |
+ transport_->SetPaused(true); |
DedupInfo dedup_info; |
dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(10); |
transport_sender_->ResendPackets( |
kVideoSsrc, missing_packets, true, dedup_info); |
transport_sender_->ResendFrameForKickstart(kVideoSsrc, 1); |
- transport_.SetPaused(false); |
+ transport_->SetPaused(false); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
EXPECT_EQ(2, num_times_logging_callback_called_); |
// Resend one packet in the socket when unpaused. |
// Two more retransmission packets sent. |
- EXPECT_EQ(7, transport_.packets_sent()); |
+ EXPECT_EQ(7, transport_->packets_sent()); |
} |
TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
@@ -324,7 +337,7 @@ TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
fake_audio.reference_time = testing_clock_.NowTicks(); |
transport_sender_->InsertFrame(kAudioSsrc, fake_audio); |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |
- EXPECT_EQ(2, transport_.packets_sent()); |
+ EXPECT_EQ(2, transport_->packets_sent()); |
// Ack the first audio frame. |
RtcpCastMessage cast_message; |
@@ -334,7 +347,7 @@ TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
RtcpCastMessageCallback(), |
cast_message); |
task_runner_->RunTasks(); |
- EXPECT_EQ(2, transport_.packets_sent()); |
+ EXPECT_EQ(2, transport_->packets_sent()); |
EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. |
// Send a fake video frame that will be decomposed into 4 packets. |
@@ -344,7 +357,7 @@ TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
fake_video.data.resize(5000, ' '); |
transport_sender_->InsertFrame(kVideoSsrc, fake_video); |
task_runner_->RunTasks(); |
- EXPECT_EQ(6, transport_.packets_sent()); |
+ EXPECT_EQ(6, transport_->packets_sent()); |
EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. |
// Retransmission is reject because audio is not acked yet. |
@@ -356,7 +369,7 @@ TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
RtcpCastMessageCallback(), |
cast_message); |
task_runner_->RunTasks(); |
- EXPECT_EQ(6, transport_.packets_sent()); |
+ EXPECT_EQ(6, transport_->packets_sent()); |
EXPECT_EQ(1, num_times_logging_callback_called_); |
// Ack the second audio frame. |
@@ -368,7 +381,7 @@ TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
RtcpCastMessageCallback(), |
cast_message); |
task_runner_->RunTasks(); |
- EXPECT_EQ(6, transport_.packets_sent()); |
+ EXPECT_EQ(6, transport_->packets_sent()); |
EXPECT_EQ(1, num_times_logging_callback_called_); // Only 6 ms since last. |
// Retransmission of video packet now accepted. |
@@ -380,7 +393,7 @@ TEST_F(CastTransportSenderImplTest, DedupRetransmissionWithAudio) { |
RtcpCastMessageCallback(), |
cast_message); |
task_runner_->RunTasks(); |
- EXPECT_EQ(7, transport_.packets_sent()); |
+ EXPECT_EQ(7, transport_->packets_sent()); |
EXPECT_EQ(1, num_times_logging_callback_called_); // Only 8 ms since last. |
task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |