| Index: media/cast/test/end2end_unittest.cc
|
| diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc
|
| index 2dd2f934f1c928bb444e4b8ebb4eedd3c616a12e..7145ba369a3a9868427ce91042aa783e3da2f062 100644
|
| --- a/media/cast/test/end2end_unittest.cc
|
| +++ b/media/cast/test/end2end_unittest.cc
|
| @@ -94,12 +94,6 @@ std::string ConvertFromBase16String(const std::string& base_16) {
|
| return compressed;
|
| }
|
|
|
| -void UpdateCastTransportStatus(CastTransportStatus status) {
|
| - bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
|
| - status == TRANSPORT_VIDEO_INITIALIZED);
|
| - EXPECT_TRUE(result);
|
| -}
|
| -
|
| void ExpectSuccessOperationalStatus(OperationalStatus status) {
|
| EXPECT_EQ(STATUS_INITIALIZED, status);
|
| }
|
| @@ -213,6 +207,11 @@ class LoopBackTransport : public PacketSender {
|
|
|
| int64_t GetBytesSent() final { return bytes_sent_; }
|
|
|
| + void StartReceiving(
|
| + const PacketReceiverCallbackWithStatus& packet_receiver) final {}
|
| +
|
| + void StopReceiving() final {}
|
| +
|
| void SetSendPackets(bool send_packets) { send_packets_ = send_packets; }
|
|
|
| void DropAllPacketsBelongingToOddFrames() {
|
| @@ -397,6 +396,11 @@ class TestReceiverVideoCallback
|
| // The actual test class, generate synthetic data for both audio and video and
|
| // send those through the sender and receiver and analyzes the result.
|
| class End2EndTest : public ::testing::Test {
|
| + public:
|
| + void ReceivePacket(scoped_ptr<media::cast::Packet> packet) {
|
| + cast_receiver_->ReceivePacket(std::move(packet));
|
| + };
|
| +
|
| protected:
|
| End2EndTest()
|
| : start_time_(),
|
| @@ -417,8 +421,8 @@ class End2EndTest : public ::testing::Test {
|
| task_runner_receiver_,
|
| task_runner_receiver_,
|
| task_runner_receiver_)),
|
| - receiver_to_sender_(cast_environment_receiver_),
|
| - sender_to_receiver_(cast_environment_sender_),
|
| + receiver_to_sender_(new LoopBackTransport(cast_environment_receiver_)),
|
| + sender_to_receiver_(new LoopBackTransport(cast_environment_sender_)),
|
| test_receiver_audio_callback_(new TestReceiverAudioCallback()),
|
| test_receiver_video_callback_(new TestReceiverVideoCallback()) {
|
| testing_clock_.Advance(
|
| @@ -549,68 +553,7 @@ class End2EndTest : public ::testing::Test {
|
| }
|
| }
|
|
|
| - void ReceivePacket(scoped_ptr<Packet> packet) {
|
| - cast_receiver_->ReceivePacket(std::move(packet));
|
| - }
|
| -
|
| - void Create() {
|
| - net::IPEndPoint dummy_endpoint;
|
| - transport_sender_.reset(new CastTransportSenderImpl(
|
| - nullptr, testing_clock_sender_, dummy_endpoint, dummy_endpoint,
|
| - make_scoped_ptr(new base::DictionaryValue),
|
| - base::Bind(&UpdateCastTransportStatus),
|
| - base::Bind(&LogEventDispatcher::DispatchBatchOfEvents,
|
| - base::Unretained(cast_environment_sender_->logger())),
|
| - base::TimeDelta::FromMilliseconds(1), task_runner_sender_,
|
| - PacketReceiverCallback(), &sender_to_receiver_));
|
| -
|
| - transport_receiver_.reset(new CastTransportSenderImpl(
|
| - nullptr, testing_clock_sender_, dummy_endpoint, dummy_endpoint,
|
| - make_scoped_ptr(new base::DictionaryValue),
|
| - base::Bind(&UpdateCastTransportStatus),
|
| - base::Bind(&LogEventDispatcher::DispatchBatchOfEvents,
|
| - base::Unretained(cast_environment_receiver_->logger())),
|
| - base::TimeDelta::FromMilliseconds(1), task_runner_sender_,
|
| - base::Bind(&End2EndTest::ReceivePacket, base::Unretained(this)),
|
| - &receiver_to_sender_));
|
| -
|
| - cast_receiver_ = CastReceiver::Create(cast_environment_receiver_,
|
| - audio_receiver_config_,
|
| - video_receiver_config_,
|
| - transport_receiver_.get());
|
| -
|
| - cast_sender_ =
|
| - CastSender::Create(cast_environment_sender_, transport_sender_.get());
|
| -
|
| - // Initializing audio and video senders.
|
| - cast_sender_->InitializeAudio(
|
| - audio_sender_config_,
|
| - base::Bind(&ExpectSuccessOperationalStatus));
|
| - cast_sender_->InitializeVideo(
|
| - video_sender_config_,
|
| - base::Bind(&ExpectSuccessOperationalStatus),
|
| - CreateDefaultVideoEncodeAcceleratorCallback(),
|
| - CreateDefaultVideoEncodeMemoryCallback());
|
| - task_runner_->RunTasks();
|
| -
|
| - receiver_to_sender_.SetPacketReceiver(
|
| - transport_sender_->PacketReceiverForTesting(),
|
| - task_runner_,
|
| - &testing_clock_);
|
| - sender_to_receiver_.SetPacketReceiver(
|
| - transport_receiver_->PacketReceiverForTesting(),
|
| - task_runner_,
|
| - &testing_clock_);
|
| -
|
| - audio_frame_input_ = cast_sender_->audio_frame_input();
|
| - video_frame_input_ = cast_sender_->video_frame_input();
|
| -
|
| - audio_bus_factory_.reset(
|
| - new TestAudioBusFactory(audio_sender_config_.channels,
|
| - audio_sender_config_.frequency,
|
| - kSoundFrequency,
|
| - kSoundVolume));
|
| - }
|
| + void Create();
|
|
|
| ~End2EndTest() override {
|
| cast_environment_sender_->logger()->Unsubscribe(&event_subscriber_sender_);
|
| @@ -916,8 +859,9 @@ class End2EndTest : public ::testing::Test {
|
| scoped_refptr<CastEnvironment> cast_environment_sender_;
|
| scoped_refptr<CastEnvironment> cast_environment_receiver_;
|
|
|
| - LoopBackTransport receiver_to_sender_;
|
| - LoopBackTransport sender_to_receiver_;
|
| + LoopBackTransport* receiver_to_sender_; // Owned by CastTransportSender.
|
| + LoopBackTransport* sender_to_receiver_; // Owned by CastTransportSender.
|
| +
|
| scoped_ptr<CastTransportSenderImpl> transport_sender_;
|
| scoped_ptr<CastTransportSenderImpl> transport_receiver_;
|
|
|
| @@ -940,6 +884,83 @@ class End2EndTest : public ::testing::Test {
|
| base::MessageLoop message_loop_;
|
| };
|
|
|
| +namespace {
|
| +
|
| +class TransportClient : public CastTransportSender::Client {
|
| + public:
|
| + TransportClient(LogEventDispatcher* log_event_dispatcher,
|
| + End2EndTest* e2e_test)
|
| + : log_event_dispatcher_(log_event_dispatcher), e2e_test_(e2e_test) {}
|
| +
|
| + void OnStatusChanged(media::cast::CastTransportStatus status) final {
|
| + bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
|
| + status == TRANSPORT_VIDEO_INITIALIZED);
|
| + EXPECT_TRUE(result);
|
| + };
|
| + void OnLoggingEventsReceived(
|
| + scoped_ptr<std::vector<FrameEvent>> frame_events,
|
| + scoped_ptr<std::vector<PacketEvent>> packet_events) final {
|
| + log_event_dispatcher_->DispatchBatchOfEvents(std::move(frame_events),
|
| + std::move(packet_events));
|
| + };
|
| + void ProcessRtpPacket(scoped_ptr<Packet> packet) final {
|
| + if (e2e_test_)
|
| + e2e_test_->ReceivePacket(std::move(packet));
|
| + };
|
| +
|
| + private:
|
| + LogEventDispatcher* const log_event_dispatcher_; // Not owned by this class.
|
| + End2EndTest* const e2e_test_; // Not owned by this class.
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TransportClient);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +void End2EndTest::Create() {
|
| + transport_sender_.reset(new CastTransportSenderImpl(
|
| + testing_clock_sender_, base::TimeDelta::FromMilliseconds(1),
|
| + make_scoped_ptr(
|
| + new TransportClient(cast_environment_sender_->logger(), nullptr)),
|
| + make_scoped_ptr(sender_to_receiver_), task_runner_sender_));
|
| +
|
| + transport_receiver_.reset(new CastTransportSenderImpl(
|
| + testing_clock_sender_, base::TimeDelta::FromMilliseconds(1),
|
| + make_scoped_ptr(
|
| + new TransportClient(cast_environment_receiver_->logger(), this)),
|
| + make_scoped_ptr(receiver_to_sender_), task_runner_sender_));
|
| +
|
| + cast_receiver_ =
|
| + CastReceiver::Create(cast_environment_receiver_, audio_receiver_config_,
|
| + video_receiver_config_, transport_receiver_.get());
|
| +
|
| + cast_sender_ =
|
| + CastSender::Create(cast_environment_sender_, transport_sender_.get());
|
| +
|
| + // Initializing audio and video senders.
|
| + cast_sender_->InitializeAudio(audio_sender_config_,
|
| + base::Bind(&ExpectSuccessOperationalStatus));
|
| + cast_sender_->InitializeVideo(video_sender_config_,
|
| + base::Bind(&ExpectSuccessOperationalStatus),
|
| + CreateDefaultVideoEncodeAcceleratorCallback(),
|
| + CreateDefaultVideoEncodeMemoryCallback());
|
| + task_runner_->RunTasks();
|
| +
|
| + receiver_to_sender_->SetPacketReceiver(
|
| + transport_sender_->PacketReceiverForTesting(), task_runner_,
|
| + &testing_clock_);
|
| + sender_to_receiver_->SetPacketReceiver(
|
| + transport_receiver_->PacketReceiverForTesting(), task_runner_,
|
| + &testing_clock_);
|
| +
|
| + audio_frame_input_ = cast_sender_->audio_frame_input();
|
| + video_frame_input_ = cast_sender_->video_frame_input();
|
| +
|
| + audio_bus_factory_.reset(new TestAudioBusFactory(
|
| + audio_sender_config_.channels, audio_sender_config_.frequency,
|
| + kSoundFrequency, kSoundVolume));
|
| +}
|
| +
|
| TEST_F(End2EndTest, LoopWithLosslessEncoding) {
|
| Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
|
| Create();
|
| @@ -980,7 +1001,7 @@ TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
|
| int frame_number = 0;
|
| int audio_diff = kFrameTimerMs;
|
|
|
| - sender_to_receiver_.SetSendPackets(false);
|
| + sender_to_receiver_->SetSendPackets(false);
|
|
|
| const int test_delay_ms = 100;
|
|
|
| @@ -1015,7 +1036,7 @@ TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
|
| }
|
|
|
| RunTasks(test_delay_ms);
|
| - sender_to_receiver_.SetSendPackets(true);
|
| + sender_to_receiver_->SetSendPackets(true);
|
|
|
| int num_audio_frames_requested = 0;
|
| for (int j = 0; j < 10; ++j) {
|
| @@ -1142,8 +1163,8 @@ TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) {
|
|
|
| TEST_F(End2EndTest, EvilNetwork) {
|
| Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
|
| - receiver_to_sender_.SetPacketPipe(test::EvilNetwork());
|
| - sender_to_receiver_.SetPacketPipe(test::EvilNetwork());
|
| + receiver_to_sender_->SetPacketPipe(test::EvilNetwork());
|
| + sender_to_receiver_->SetPacketPipe(test::EvilNetwork());
|
| Create();
|
| StartBasicPlayer();
|
|
|
| @@ -1164,8 +1185,8 @@ TEST_F(End2EndTest, EvilNetwork) {
|
| // at a much higher frame rate.
|
| TEST_F(End2EndTest, ShoveHighFrameRateDownYerThroat) {
|
| Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
|
| - receiver_to_sender_.SetPacketPipe(test::EvilNetwork());
|
| - sender_to_receiver_.SetPacketPipe(test::EvilNetwork());
|
| + receiver_to_sender_->SetPacketPipe(test::EvilNetwork());
|
| + sender_to_receiver_->SetPacketPipe(test::EvilNetwork());
|
| Create();
|
| StartBasicPlayer();
|
|
|
| @@ -1185,7 +1206,7 @@ TEST_F(End2EndTest, ShoveHighFrameRateDownYerThroat) {
|
|
|
| TEST_F(End2EndTest, OldPacketNetwork) {
|
| Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
|
| - sender_to_receiver_.SetPacketPipe(test::NewRandomDrop(0.01));
|
| + sender_to_receiver_->SetPacketPipe(test::NewRandomDrop(0.01));
|
| scoped_ptr<test::PacketPipe> echo_chamber(
|
| test::NewDuplicateAndDelay(1, 10 * kFrameTimerMs));
|
| echo_chamber->AppendToPipe(
|
| @@ -1197,7 +1218,7 @@ TEST_F(End2EndTest, OldPacketNetwork) {
|
| echo_chamber->AppendToPipe(
|
| test::NewDuplicateAndDelay(1, 160 * kFrameTimerMs));
|
|
|
| - receiver_to_sender_.SetPacketPipe(std::move(echo_chamber));
|
| + receiver_to_sender_->SetPacketPipe(std::move(echo_chamber));
|
| Create();
|
| StartBasicPlayer();
|
|
|
|
|