summaryrefslogtreecommitdiff
path: root/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc')
-rw-r--r--chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc145
1 files changed, 145 insertions, 0 deletions
diff --git a/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc b/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
new file mode 100644
index 00000000000..bed7cba2e8f
--- /dev/null
+++ b/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
@@ -0,0 +1,145 @@
+// 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 "media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.h"
+
+#include <gtest/gtest.h>
+
+#include "base/memory/scoped_ptr.h"
+#include "media/cast/cast_config.h"
+#include "media/cast/pacing/paced_sender.h"
+#include "media/cast/rtp_common/rtp_defines.h"
+#include "media/cast/rtp_sender/packet_storage/packet_storage.h"
+#include "media/cast/rtp_sender/rtp_packetizer/test/rtp_header_parser.h"
+
+namespace media {
+namespace cast {
+
+static const int kPayload = 127;
+static const uint32 kTimestampMs = 10;
+static const uint16 kSeqNum = 33;
+static const int kTimeOffset = 22222;
+static const int kMaxPacketLength = 1500;
+static const bool kMarkerBit = true;
+static const int kSsrc = 0x12345;
+static const uint8 kFrameId = 1;
+static const unsigned int kFrameSize = 5000;
+static const int kTotalHeaderLength = 19;
+static const int kMaxPacketStorageTimeMs = 300;
+
+class TestRtpPacketTransport : public PacedPacketSender {
+ public:
+ explicit TestRtpPacketTransport(RtpPacketizerConfig config)
+ : config_(config),
+ sequence_number_(kSeqNum),
+ packets_sent_(0),
+ expected_number_of_packets_(0) {}
+
+ void VerifyRtpHeader(const RtpCastHeader& rtp_header) {
+ VerifyCommonRtpHeader(rtp_header);
+ VerifyCastRtpHeader(rtp_header);
+ }
+
+ void VerifyCommonRtpHeader(const RtpCastHeader& rtp_header) {
+ EXPECT_EQ(expected_number_of_packets_ == packets_sent_,
+ rtp_header.webrtc.header.markerBit);
+ EXPECT_EQ(kPayload, rtp_header.webrtc.header.payloadType);
+ EXPECT_EQ(sequence_number_, rtp_header.webrtc.header.sequenceNumber);
+ EXPECT_EQ(kTimestampMs * 90, rtp_header.webrtc.header.timestamp);
+ EXPECT_EQ(config_.ssrc, rtp_header.webrtc.header.ssrc);
+ EXPECT_EQ(0, rtp_header.webrtc.header.numCSRCs);
+ }
+
+ void VerifyCastRtpHeader(const RtpCastHeader& rtp_header) {
+ // TODO(mikhal)
+ }
+
+ virtual bool SendPacket(const std::vector<uint8>& packet,
+ int num_packets) OVERRIDE {
+ EXPECT_EQ(expected_number_of_packets_, num_packets);
+ ++packets_sent_;
+ RtpHeaderParser parser(packet.data(), packet.size());
+ RtpCastHeader rtp_header;
+ parser.Parse(&rtp_header);
+ VerifyRtpHeader(rtp_header);
+ ++sequence_number_;
+ return true;
+ }
+
+ virtual bool ResendPacket(const std::vector<uint8>& packet,
+ int num_of_packets) OVERRIDE {
+ EXPECT_TRUE(false);
+ return false;
+ }
+
+ virtual bool SendRtcpPacket(const std::vector<uint8>& packet) OVERRIDE {
+ EXPECT_TRUE(false);
+ return false;
+ }
+
+ void SetExpectedNumberOfPackets(int num) {
+ expected_number_of_packets_ = num;
+ }
+
+ RtpPacketizerConfig config_;
+ uint32 sequence_number_;
+ int packets_sent_;
+ int expected_number_of_packets_;
+};
+
+class RtpPacketizerTest : public ::testing::Test {
+ protected:
+ RtpPacketizerTest()
+ :video_frame_(),
+ packet_storage_(kMaxPacketStorageTimeMs) {
+ config_.sequence_number = kSeqNum;
+ config_.ssrc = kSsrc;
+ config_.payload_type = kPayload;
+ config_.max_payload_length = kMaxPacketLength;
+ transport_.reset(new TestRtpPacketTransport(config_));
+ rtp_packetizer_.reset(
+ new RtpPacketizer(transport_.get(), &packet_storage_, config_));
+ }
+
+ ~RtpPacketizerTest() {}
+
+ void SetUp() {
+ video_frame_.key_frame = false;
+ video_frame_.frame_id = kFrameId;
+ video_frame_.last_referenced_frame_id = kFrameId - 1;
+ video_frame_.data.assign(kFrameSize, 123);
+ }
+
+ scoped_ptr<RtpPacketizer> rtp_packetizer_;
+ RtpPacketizerConfig config_;
+ scoped_ptr<TestRtpPacketTransport> transport_;
+ EncodedVideoFrame video_frame_;
+ PacketStorage packet_storage_;
+};
+
+TEST_F(RtpPacketizerTest, SendStandardPackets) {
+ int expected_num_of_packets = kFrameSize / kMaxPacketLength + 1;
+ transport_->SetExpectedNumberOfPackets(expected_num_of_packets);
+
+ base::TimeTicks time;
+ time += base::TimeDelta::FromMilliseconds(kTimestampMs);
+ rtp_packetizer_->IncomingEncodedVideoFrame(&video_frame_,time);
+}
+
+TEST_F(RtpPacketizerTest, Stats) {
+ EXPECT_FALSE(rtp_packetizer_->send_packets_count());
+ EXPECT_FALSE(rtp_packetizer_->send_octet_count());
+ // Insert packets at varying lengths.
+ unsigned int expected_num_of_packets = kFrameSize / kMaxPacketLength + 1;
+ transport_->SetExpectedNumberOfPackets(expected_num_of_packets);
+
+ base::TimeTicks time;
+ time += base::TimeDelta::FromMilliseconds(kTimestampMs);
+ rtp_packetizer_->IncomingEncodedVideoFrame(&video_frame_, time);
+ EXPECT_EQ(expected_num_of_packets, rtp_packetizer_->send_packets_count());
+ EXPECT_EQ(kFrameSize, rtp_packetizer_->send_octet_count());
+}
+
+} // namespace cast
+} // namespace media