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

Unified Diff: media/cast/transport/pacing/paced_sender_unittest.cc

Issue 388663003: Cast: Reshuffle files under media/cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: missing includes Created 6 years, 5 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
« no previous file with comments | « media/cast/transport/pacing/paced_sender.cc ('k') | media/cast/transport/rtcp/rtcp_builder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/transport/pacing/paced_sender_unittest.cc
diff --git a/media/cast/transport/pacing/paced_sender_unittest.cc b/media/cast/transport/pacing/paced_sender_unittest.cc
deleted file mode 100644
index 5e24fca4b5694f23b6c321fad8a91615f5e6b776..0000000000000000000000000000000000000000
--- a/media/cast/transport/pacing/paced_sender_unittest.cc
+++ /dev/null
@@ -1,351 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdint.h>
-
-#include "base/big_endian.h"
-#include "base/test/simple_test_tick_clock.h"
-#include "media/cast/logging/simple_event_subscriber.h"
-#include "media/cast/test/fake_single_thread_task_runner.h"
-#include "media/cast/transport/pacing/paced_sender.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace media {
-namespace cast {
-namespace transport {
-
-using testing::_;
-
-static const uint8 kValue = 123;
-static const size_t kSize1 = 100;
-static const size_t kSize2 = 101;
-static const size_t kSize3 = 102;
-static const size_t kSize4 = 103;
-static const size_t kNackSize = 104;
-static const int64 kStartMillisecond = INT64_C(12345678900000);
-static const uint32 kVideoSsrc = 0x1234;
-static const uint32 kAudioSsrc = 0x5678;
-
-class TestPacketSender : public PacketSender {
- public:
- TestPacketSender() {}
-
- virtual bool SendPacket(PacketRef packet, const base::Closure& cb) OVERRIDE {
- EXPECT_FALSE(expected_packet_size_.empty());
- size_t expected_packet_size = expected_packet_size_.front();
- expected_packet_size_.pop_front();
- EXPECT_EQ(expected_packet_size, packet->data.size());
- return true;
- }
-
- void AddExpectedSize(int expected_packet_size, int repeat_count) {
- for (int i = 0; i < repeat_count; ++i) {
- expected_packet_size_.push_back(expected_packet_size);
- }
- }
-
- public:
- std::list<int> expected_packet_size_;
-
- DISALLOW_COPY_AND_ASSIGN(TestPacketSender);
-};
-
-class PacedSenderTest : public ::testing::Test {
- protected:
- PacedSenderTest() {
- logging_.AddRawEventSubscriber(&subscriber_);
- testing_clock_.Advance(
- base::TimeDelta::FromMilliseconds(kStartMillisecond));
- task_runner_ = new test::FakeSingleThreadTaskRunner(&testing_clock_);
- paced_sender_.reset(new PacedSender(
- &testing_clock_, &logging_, &mock_transport_, task_runner_));
- paced_sender_->RegisterAudioSsrc(kAudioSsrc);
- paced_sender_->RegisterVideoSsrc(kVideoSsrc);
- }
-
- virtual ~PacedSenderTest() {
- logging_.RemoveRawEventSubscriber(&subscriber_);
- }
-
- static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
- NOTREACHED();
- }
-
- SendPacketVector CreateSendPacketVector(size_t packet_size,
- int num_of_packets_in_frame,
- bool audio) {
- DCHECK_GE(packet_size, 12u);
- SendPacketVector packets;
- base::TimeTicks frame_tick = testing_clock_.NowTicks();
- // Advance the clock so that we don't get the same frame_tick
- // next time this function is called.
- testing_clock_.Advance(base::TimeDelta::FromMilliseconds(1));
- for (int i = 0; i < num_of_packets_in_frame; ++i) {
- PacketKey key = PacedPacketSender::MakePacketKey(
- frame_tick,
- audio ? kAudioSsrc : kVideoSsrc, // ssrc
- i);
-
- PacketRef packet(new base::RefCountedData<Packet>);
- packet->data.resize(packet_size, kValue);
- // Write ssrc to packet so that it can be recognized as a
- // "video frame" for logging purposes.
- base::BigEndianWriter writer(
- reinterpret_cast<char*>(&packet->data[8]), 4);
- bool success = writer.WriteU32(audio ? kAudioSsrc : kVideoSsrc);
- DCHECK(success);
- packets.push_back(std::make_pair(key, packet));
- }
- return packets;
- }
-
- // Use this function to drain the packet list in PacedSender without having
- // to test the pacing implementation details.
- bool RunUntilEmpty(int max_tries) {
- for (int i = 0; i < max_tries; i++) {
- testing_clock_.Advance(base::TimeDelta::FromMilliseconds(10));
- task_runner_->RunTasks();
- if (mock_transport_.expected_packet_size_.empty())
- return true;
- i++;
- }
-
- return mock_transport_.expected_packet_size_.empty();
- }
-
- LoggingImpl logging_;
- SimpleEventSubscriber subscriber_;
- base::SimpleTestTickClock testing_clock_;
- TestPacketSender mock_transport_;
- scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
- scoped_ptr<PacedSender> paced_sender_;
-
- DISALLOW_COPY_AND_ASSIGN(PacedSenderTest);
-};
-
-TEST_F(PacedSenderTest, PassThroughRtcp) {
- mock_transport_.AddExpectedSize(kSize1, 2);
- SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true);
-
- EXPECT_TRUE(paced_sender_->SendPackets(packets));
- EXPECT_TRUE(paced_sender_->ResendPackets(packets, base::TimeDelta()));
-
- mock_transport_.AddExpectedSize(kSize2, 1);
- Packet tmp(kSize2, kValue);
- EXPECT_TRUE(paced_sender_->SendRtcpPacket(
- 1,
- new base::RefCountedData<Packet>(tmp)));
-}
-
-TEST_F(PacedSenderTest, BasicPace) {
- int num_of_packets = 27;
- SendPacketVector packets = CreateSendPacketVector(kSize1,
- num_of_packets,
- false);
-
- mock_transport_.AddExpectedSize(kSize1, 10);
- EXPECT_TRUE(paced_sender_->SendPackets(packets));
-
- // Check that we get the next burst.
- mock_transport_.AddExpectedSize(kSize1, 10);
-
- base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(10);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // If we call process too early make sure we don't send any packets.
- timeout = base::TimeDelta::FromMilliseconds(5);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // Check that we get the next burst.
- mock_transport_.AddExpectedSize(kSize1, 7);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // Check that we don't get any more packets.
- EXPECT_TRUE(RunUntilEmpty(3));
-
- std::vector<PacketEvent> packet_events;
- subscriber_.GetPacketEventsAndReset(&packet_events);
- EXPECT_EQ(num_of_packets, static_cast<int>(packet_events.size()));
- int sent_to_network_event_count = 0;
- for (std::vector<PacketEvent>::iterator it = packet_events.begin();
- it != packet_events.end();
- ++it) {
- if (it->type == PACKET_SENT_TO_NETWORK)
- sent_to_network_event_count++;
- else
- FAIL() << "Got unexpected event type " << CastLoggingToString(it->type);
- }
- EXPECT_EQ(num_of_packets, sent_to_network_event_count);
-}
-
-TEST_F(PacedSenderTest, PaceWithNack) {
- // Testing what happen when we get multiple NACK requests for a fully lost
- // frames just as we sent the first packets in a frame.
- int num_of_packets_in_frame = 12;
- int num_of_packets_in_nack = 12;
-
- SendPacketVector nack_packets =
- CreateSendPacketVector(kNackSize, num_of_packets_in_nack, false);
-
- SendPacketVector first_frame_packets =
- CreateSendPacketVector(kSize1, num_of_packets_in_frame, false);
-
- SendPacketVector second_frame_packets =
- CreateSendPacketVector(kSize2, num_of_packets_in_frame, true);
-
- // Check that the first burst of the frame go out on the wire.
- mock_transport_.AddExpectedSize(kSize1, 10);
- EXPECT_TRUE(paced_sender_->SendPackets(first_frame_packets));
-
- // Add first NACK request.
- EXPECT_TRUE(paced_sender_->ResendPackets(nack_packets, base::TimeDelta()));
-
- // Check that we get the first NACK burst.
- mock_transport_.AddExpectedSize(kNackSize, 10);
- base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(10);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // Add second NACK request.
- EXPECT_TRUE(paced_sender_->ResendPackets(nack_packets, base::TimeDelta()));
-
- // Check that we get the next NACK burst.
- mock_transport_.AddExpectedSize(kNackSize, 10);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // End of NACK plus two packets from the oldest frame.
- // Note that two of the NACKs have been de-duped.
- mock_transport_.AddExpectedSize(kNackSize, 2);
- mock_transport_.AddExpectedSize(kSize1, 2);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // Add second frame.
- // Make sure we don't delay the second frame due to the previous packets.
- mock_transport_.AddExpectedSize(kSize2, 10);
- EXPECT_TRUE(paced_sender_->SendPackets(second_frame_packets));
-
- // Last packets of frame 2.
- mock_transport_.AddExpectedSize(kSize2, 2);
- testing_clock_.Advance(timeout);
- task_runner_->RunTasks();
-
- // No more packets.
- EXPECT_TRUE(RunUntilEmpty(5));
-
- std::vector<PacketEvent> packet_events;
- subscriber_.GetPacketEventsAndReset(&packet_events);
- int expected_video_network_event_count = num_of_packets_in_frame;
- int expected_video_retransmitted_event_count = 2 * num_of_packets_in_nack;
- expected_video_retransmitted_event_count -= 2; // 2 packets deduped
- int expected_audio_network_event_count = num_of_packets_in_frame;
- EXPECT_EQ(expected_video_network_event_count +
- expected_video_retransmitted_event_count +
- expected_audio_network_event_count,
- static_cast<int>(packet_events.size()));
- int audio_network_event_count = 0;
- int video_network_event_count = 0;
- int video_retransmitted_event_count = 0;
- for (std::vector<PacketEvent>::iterator it = packet_events.begin();
- it != packet_events.end();
- ++it) {
- if (it->type == PACKET_SENT_TO_NETWORK) {
- if (it->media_type == VIDEO_EVENT)
- video_network_event_count++;
- else
- audio_network_event_count++;
- } else if (it->type == PACKET_RETRANSMITTED) {
- if (it->media_type == VIDEO_EVENT)
- video_retransmitted_event_count++;
- } else {
- FAIL() << "Got unexpected event type " << CastLoggingToString(it->type);
- }
- }
- EXPECT_EQ(expected_audio_network_event_count, audio_network_event_count);
- EXPECT_EQ(expected_video_network_event_count, video_network_event_count);
- EXPECT_EQ(expected_video_retransmitted_event_count,
- video_retransmitted_event_count);
-}
-
-TEST_F(PacedSenderTest, PaceWith60fps) {
- // Testing what happen when we get multiple NACK requests for a fully lost
- // frames just as we sent the first packets in a frame.
- int num_of_packets_in_frame = 17;
-
- SendPacketVector first_frame_packets =
- CreateSendPacketVector(kSize1, num_of_packets_in_frame, false);
-
- SendPacketVector second_frame_packets =
- CreateSendPacketVector(kSize2, num_of_packets_in_frame, false);
-
- SendPacketVector third_frame_packets =
- CreateSendPacketVector(kSize3, num_of_packets_in_frame, false);
-
- SendPacketVector fourth_frame_packets =
- CreateSendPacketVector(kSize4, num_of_packets_in_frame, false);
-
- base::TimeDelta timeout_10ms = base::TimeDelta::FromMilliseconds(10);
-
- // Check that the first burst of the frame go out on the wire.
- mock_transport_.AddExpectedSize(kSize1, 10);
- EXPECT_TRUE(paced_sender_->SendPackets(first_frame_packets));
-
- mock_transport_.AddExpectedSize(kSize1, 7);
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- testing_clock_.Advance(base::TimeDelta::FromMilliseconds(6));
-
- // Add second frame, after 16 ms.
- mock_transport_.AddExpectedSize(kSize2, 3);
- EXPECT_TRUE(paced_sender_->SendPackets(second_frame_packets));
- testing_clock_.Advance(base::TimeDelta::FromMilliseconds(4));
-
- mock_transport_.AddExpectedSize(kSize2, 10);
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- mock_transport_.AddExpectedSize(kSize2, 4);
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- testing_clock_.Advance(base::TimeDelta::FromMilliseconds(3));
-
- // Add third frame, after 33 ms.
- mock_transport_.AddExpectedSize(kSize3, 6);
- EXPECT_TRUE(paced_sender_->SendPackets(third_frame_packets));
-
- mock_transport_.AddExpectedSize(kSize3, 10);
- testing_clock_.Advance(base::TimeDelta::FromMilliseconds(7));
- task_runner_->RunTasks();
-
- // Add fourth frame, after 50 ms.
- EXPECT_TRUE(paced_sender_->SendPackets(fourth_frame_packets));
-
- mock_transport_.AddExpectedSize(kSize3, 1);
- mock_transport_.AddExpectedSize(kSize4, 9);
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- mock_transport_.AddExpectedSize(kSize4, 8);
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- testing_clock_.Advance(timeout_10ms);
- task_runner_->RunTasks();
-
- // No more packets.
- EXPECT_TRUE(RunUntilEmpty(5));
-}
-
-} // namespace transport
-} // namespace cast
-} // namespace media
« no previous file with comments | « media/cast/transport/pacing/paced_sender.cc ('k') | media/cast/transport/rtcp/rtcp_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698