summaryrefslogtreecommitdiffstats
path: root/chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc')
-rw-r--r--chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc231
1 files changed, 115 insertions, 116 deletions
diff --git a/chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc b/chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc
index c0f91d10fff..47c79139ffc 100644
--- a/chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc
+++ b/chromium/media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc
@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <gtest/gtest.h>
-
#include "base/memory/scoped_ptr.h"
+#include "base/rand_util.h"
#include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
#include "media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h"
-#include "media/cast/rtp_receiver/rtp_receiver.h"
#include "media/cast/rtp_receiver/rtp_receiver_defines.h"
+#include "testing/gtest/include/gtest/gtest.h"
namespace media {
namespace cast {
@@ -20,178 +19,178 @@ static const uint32 kTestTimestamp = 111111;
static const uint16 kTestSeqNum = 4321;
static const uint8 kRefFrameId = 17;
-class RtpDataTest : public RtpData {
- public:
- RtpDataTest() {
- expected_header_.reset(new RtpCastHeader());
- }
-
- virtual ~RtpDataTest() {}
-
- void SetExpectedHeader(const RtpCastHeader& cast_header) {
- memcpy(expected_header_.get(), &cast_header, sizeof(RtpCastHeader));
- }
-
- virtual void OnReceivedPayloadData(const uint8* payloadData,
- size_t payloadSize,
- const RtpCastHeader* rtpHeader) OVERRIDE {
- VerifyCommonHeader(*rtpHeader);
- VerifyCastHeader(*rtpHeader);
- }
-
- void VerifyCommonHeader(const RtpCastHeader& parsed_header) {
- EXPECT_EQ(expected_header_->packet_id == expected_header_->max_packet_id,
- parsed_header.webrtc.header.markerBit);
- EXPECT_EQ(kTestPayloadType, parsed_header.webrtc.header.payloadType);
- EXPECT_EQ(kTestSsrc, parsed_header.webrtc.header.ssrc);
- EXPECT_EQ(0, parsed_header.webrtc.header.numCSRCs);
- }
-
- void VerifyCastHeader(const RtpCastHeader& parsed_header) {
- EXPECT_EQ(expected_header_->is_key_frame, parsed_header.is_key_frame);
- EXPECT_EQ(expected_header_->frame_id, parsed_header.frame_id);
- EXPECT_EQ(expected_header_->packet_id, parsed_header.packet_id);
- EXPECT_EQ(expected_header_->max_packet_id, parsed_header.max_packet_id);
- EXPECT_EQ(expected_header_->is_reference, parsed_header.is_reference);
- }
-
- private:
- scoped_ptr<RtpCastHeader> expected_header_;
-};
-
class RtpParserTest : public ::testing::Test {
protected:
- RtpParserTest() {
- PopulateConfig();
- rtp_data_.reset(new RtpDataTest());
- rtp_parser_.reset(new RtpParser(rtp_data_.get(), config_));
- }
-
- virtual ~RtpParserTest() {}
-
- virtual void SetUp() {
- cast_header_.is_reference = true;
- cast_header_.reference_frame_id = kRefFrameId;
+ RtpParserTest() : rtp_parser_(kTestSsrc, kTestPayloadType) {
packet_builder_.SetSsrc(kTestSsrc);
- packet_builder_.SetReferenceFrameId(kRefFrameId, true);
packet_builder_.SetSequenceNumber(kTestSeqNum);
packet_builder_.SetTimestamp(kTestTimestamp);
packet_builder_.SetPayloadType(kTestPayloadType);
packet_builder_.SetMarkerBit(true); // Only one packet.
+ cast_header_.sender_ssrc = kTestSsrc;
+ cast_header_.sequence_number = kTestSeqNum;
+ cast_header_.rtp_timestamp = kTestTimestamp;
+ cast_header_.payload_type = kTestPayloadType;
+ cast_header_.marker = true;
+ }
+
+ virtual ~RtpParserTest() {}
+
+ void ExpectParsesPacket() {
+ RtpCastHeader parsed_header;
+ const uint8* payload = NULL;
+ size_t payload_size = -1;
+ EXPECT_TRUE(rtp_parser_.ParsePacket(
+ packet_, kPacketLength, &parsed_header, &payload, &payload_size));
+
+ EXPECT_EQ(cast_header_.marker, parsed_header.marker);
+ EXPECT_EQ(cast_header_.payload_type, parsed_header.payload_type);
+ EXPECT_EQ(cast_header_.sequence_number, parsed_header.sequence_number);
+ EXPECT_EQ(cast_header_.rtp_timestamp, parsed_header.rtp_timestamp);
+ EXPECT_EQ(cast_header_.sender_ssrc, parsed_header.sender_ssrc);
+
+ EXPECT_EQ(cast_header_.is_key_frame, parsed_header.is_key_frame);
+ EXPECT_EQ(cast_header_.frame_id, parsed_header.frame_id);
+ EXPECT_EQ(cast_header_.packet_id, parsed_header.packet_id);
+ EXPECT_EQ(cast_header_.max_packet_id, parsed_header.max_packet_id);
+ EXPECT_EQ(cast_header_.reference_frame_id,
+ parsed_header.reference_frame_id);
+
+ EXPECT_TRUE(!!payload);
+ EXPECT_NE(static_cast<size_t>(-1), payload_size);
}
- void PopulateConfig() {
- config_.payload_type = kTestPayloadType;
- config_.ssrc = kTestSsrc;
+ void ExpectDoesNotParsePacket() {
+ RtpCastHeader parsed_header;
+ const uint8* payload = NULL;
+ size_t payload_size = -1;
+ EXPECT_FALSE(rtp_parser_.ParsePacket(
+ packet_, kPacketLength, &parsed_header, &payload, &payload_size));
}
- scoped_ptr<RtpDataTest> rtp_data_;
RtpPacketBuilder packet_builder_;
- scoped_ptr<RtpParser> rtp_parser_;
- RtpParserConfig config_;
+ uint8 packet_[kPacketLength];
+ RtpParser rtp_parser_;
RtpCastHeader cast_header_;
};
TEST_F(RtpParserTest, ParseDefaultCastPacket) {
- // Build generic data packet.
- uint8 packet[kPacketLength];
- packet_builder_.BuildHeader(packet, kPacketLength);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- rtp_data_->SetExpectedHeader(cast_header_);
- EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ ExpectParsesPacket();
}
TEST_F(RtpParserTest, ParseNonDefaultCastPacket) {
- // Build generic data packet.
- uint8 packet[kPacketLength];
packet_builder_.SetKeyFrame(true);
- packet_builder_.SetFrameId(10);
+ packet_builder_.SetFrameIds(10, 10);
packet_builder_.SetPacketId(5);
packet_builder_.SetMaxPacketId(15);
packet_builder_.SetMarkerBit(false);
- packet_builder_.BuildHeader(packet, kPacketLength);
+ packet_builder_.BuildHeader(packet_, kPacketLength);
cast_header_.is_key_frame = true;
cast_header_.frame_id = 10;
+ cast_header_.reference_frame_id = 10;
cast_header_.packet_id = 5;
cast_header_.max_packet_id = 15;
- rtp_data_->SetExpectedHeader(cast_header_);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+ cast_header_.marker = false;
+ ExpectParsesPacket();
}
TEST_F(RtpParserTest, TooBigPacketId) {
- // Build generic data packet.
- uint8 packet[kPacketLength];
packet_builder_.SetKeyFrame(true);
- packet_builder_.SetFrameId(10);
+ packet_builder_.SetFrameIds(10, 10);
packet_builder_.SetPacketId(15);
packet_builder_.SetMaxPacketId(5);
- packet_builder_.BuildHeader(packet, kPacketLength);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- EXPECT_FALSE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ cast_header_.is_key_frame = true;
+ cast_header_.frame_id = 10;
+ cast_header_.reference_frame_id = 10;
+ cast_header_.packet_id = 15;
+ cast_header_.max_packet_id = 5;
+ ExpectDoesNotParsePacket();
}
TEST_F(RtpParserTest, MaxPacketId) {
- // Build generic data packet.
- uint8 packet[kPacketLength];
packet_builder_.SetKeyFrame(true);
- packet_builder_.SetFrameId(10);
+ packet_builder_.SetFrameIds(10, 10);
packet_builder_.SetPacketId(65535);
packet_builder_.SetMaxPacketId(65535);
- packet_builder_.BuildHeader(packet, kPacketLength);
+ packet_builder_.BuildHeader(packet_, kPacketLength);
cast_header_.is_key_frame = true;
cast_header_.frame_id = 10;
+ cast_header_.reference_frame_id = 10;
cast_header_.packet_id = 65535;
cast_header_.max_packet_id = 65535;
- rtp_data_->SetExpectedHeader(cast_header_);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+ ExpectParsesPacket();
}
TEST_F(RtpParserTest, InvalidPayloadType) {
- // Build generic data packet.
- uint8 packet[kPacketLength];
packet_builder_.SetKeyFrame(true);
- packet_builder_.SetFrameId(10);
+ packet_builder_.SetFrameIds(10, 10);
packet_builder_.SetPacketId(65535);
packet_builder_.SetMaxPacketId(65535);
packet_builder_.SetPayloadType(kTestPayloadType - 1);
- packet_builder_.BuildHeader(packet, kPacketLength);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- EXPECT_FALSE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ cast_header_.is_key_frame = true;
+ cast_header_.frame_id = 10;
+ cast_header_.reference_frame_id = 10;
+ cast_header_.packet_id = 65535;
+ cast_header_.max_packet_id = 65535;
+ cast_header_.payload_type = kTestPayloadType - 1;
+ ExpectDoesNotParsePacket();
}
TEST_F(RtpParserTest, InvalidSsrc) {
- // Build generic data packet.
- uint8 packet[kPacketLength];
packet_builder_.SetKeyFrame(true);
- packet_builder_.SetFrameId(10);
+ packet_builder_.SetFrameIds(10, 10);
packet_builder_.SetPacketId(65535);
packet_builder_.SetMaxPacketId(65535);
packet_builder_.SetSsrc(kTestSsrc - 1);
- packet_builder_.BuildHeader(packet, kPacketLength);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- EXPECT_FALSE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ cast_header_.is_key_frame = true;
+ cast_header_.frame_id = 10;
+ cast_header_.reference_frame_id = 10;
+ cast_header_.packet_id = 65535;
+ cast_header_.max_packet_id = 65535;
+ cast_header_.sender_ssrc = kTestSsrc - 1;
+ ExpectDoesNotParsePacket();
+}
+
+TEST_F(RtpParserTest, ParseCastPacketWithSpecificFrameReference) {
+ packet_builder_.SetFrameIds(kRefFrameId + 3, kRefFrameId);
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ cast_header_.frame_id = kRefFrameId + 3;
+ cast_header_.reference_frame_id = kRefFrameId;
+ ExpectParsesPacket();
+}
+
+TEST_F(RtpParserTest, ParseExpandingFrameIdTo32Bits) {
+ const uint32 kMaxFrameId = 1000;
+ packet_builder_.SetKeyFrame(true);
+ cast_header_.is_key_frame = true;
+ for (uint32 frame_id = 0; frame_id <= kMaxFrameId; ++frame_id) {
+ packet_builder_.SetFrameIds(frame_id, frame_id);
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ cast_header_.frame_id = frame_id;
+ cast_header_.reference_frame_id = frame_id;
+ ExpectParsesPacket();
+ }
}
-TEST_F(RtpParserTest, ParseCastPacketWithoutReference) {
- cast_header_.is_reference = false;
- cast_header_.reference_frame_id = 0;
- packet_builder_.SetReferenceFrameId(kRefFrameId, false);
-
- // Build generic data packet.
- uint8 packet[kPacketLength];
- packet_builder_.BuildHeader(packet, kPacketLength);
- // Parse packet as is.
- RtpCastHeader rtp_header;
- rtp_data_->SetExpectedHeader(cast_header_);
- EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
+TEST_F(RtpParserTest, ParseExpandingReferenceFrameIdTo32Bits) {
+ const uint32 kMaxFrameId = 1000;
+ const uint32 kMaxBackReferenceOffset = 10;
+ packet_builder_.SetKeyFrame(false);
+ cast_header_.is_key_frame = false;
+ for (uint32 frame_id = kMaxBackReferenceOffset;
+ frame_id <= kMaxFrameId; ++frame_id) {
+ const uint32 reference_frame_id =
+ frame_id - base::RandInt(1, kMaxBackReferenceOffset);
+ packet_builder_.SetFrameIds(frame_id, reference_frame_id);
+ packet_builder_.BuildHeader(packet_, kPacketLength);
+ cast_header_.frame_id = frame_id;
+ cast_header_.reference_frame_id = reference_frame_id;
+ ExpectParsesPacket();
+ }
}
} // namespace cast