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

Side by Side Diff: media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc

Issue 250363002: [Cast] Clean-up RtpCastHeader and RtpParser, removing the last WebRTC dependency. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed hubbe's comment. Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <gtest/gtest.h>
6
7 #include "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/rand_util.h"
8 #include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h" 7 #include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
9 #include "media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h" 8 #include "media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h"
10 #include "media/cast/rtp_receiver/rtp_receiver.h" 9 #include "media/cast/rtp_receiver/rtp_receiver.h"
11 #include "media/cast/rtp_receiver/rtp_receiver_defines.h" 10 #include "media/cast/rtp_receiver/rtp_receiver_defines.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace media { 13 namespace media {
14 namespace cast { 14 namespace cast {
15 15
16 static const size_t kPacketLength = 1500; 16 static const size_t kPacketLength = 1500;
17 static const int kTestPayloadType = 127; 17 static const int kTestPayloadType = 127;
18 static const uint32 kTestSsrc = 1234; 18 static const uint32 kTestSsrc = 1234;
19 static const uint32 kTestTimestamp = 111111; 19 static const uint32 kTestTimestamp = 111111;
20 static const uint16 kTestSeqNum = 4321; 20 static const uint16 kTestSeqNum = 4321;
21 static const uint8 kRefFrameId = 17; 21 static const uint8 kRefFrameId = 17;
22 22
23 class RtpTestParser : public RtpParser {
24 public:
25 RtpTestParser(const RtpParserConfig config) : RtpParser(config) {
26 expected_header_.reset(new RtpCastHeader());
27 }
28
29 virtual ~RtpTestParser() {}
30
31 void SetExpectedHeader(const RtpCastHeader& cast_header) {
32 memcpy(expected_header_.get(), &cast_header, sizeof(RtpCastHeader));
33 }
34
35 virtual void OnReceivedPayloadData(const uint8* payloadData,
36 size_t payloadSize,
37 const RtpCastHeader& rtpHeader) OVERRIDE {
38 VerifyCommonHeader(rtpHeader);
39 VerifyCastHeader(rtpHeader);
40 }
41
42 void VerifyCommonHeader(const RtpCastHeader& parsed_header) {
43 EXPECT_EQ(expected_header_->packet_id == expected_header_->max_packet_id,
44 parsed_header.webrtc.header.markerBit);
45 EXPECT_EQ(kTestPayloadType, parsed_header.webrtc.header.payloadType);
46 EXPECT_EQ(kTestSsrc, parsed_header.webrtc.header.ssrc);
47 EXPECT_EQ(0, parsed_header.webrtc.header.numCSRCs);
48 }
49
50 void VerifyCastHeader(const RtpCastHeader& parsed_header) {
51 EXPECT_EQ(expected_header_->is_key_frame, parsed_header.is_key_frame);
52 EXPECT_EQ(expected_header_->frame_id, parsed_header.frame_id);
53 EXPECT_EQ(expected_header_->packet_id, parsed_header.packet_id);
54 EXPECT_EQ(expected_header_->max_packet_id, parsed_header.max_packet_id);
55 EXPECT_EQ(expected_header_->is_reference, parsed_header.is_reference);
56 }
57
58 private:
59 scoped_ptr<RtpCastHeader> expected_header_;
60
61 DISALLOW_COPY_AND_ASSIGN(RtpTestParser);
62 };
63
64 class RtpParserTest : public ::testing::Test { 23 class RtpParserTest : public ::testing::Test {
65 protected: 24 protected:
66 RtpParserTest() { 25 RtpParserTest() : rtp_parser_(kTestSsrc, kTestPayloadType) {
67 PopulateConfig();
68 rtp_parser_.reset(new RtpTestParser(config_));
69 cast_header_.is_reference = true;
70 cast_header_.reference_frame_id = kRefFrameId;
71 packet_builder_.SetSsrc(kTestSsrc); 26 packet_builder_.SetSsrc(kTestSsrc);
72 packet_builder_.SetReferenceFrameId(kRefFrameId, true);
73 packet_builder_.SetSequenceNumber(kTestSeqNum); 27 packet_builder_.SetSequenceNumber(kTestSeqNum);
74 packet_builder_.SetTimestamp(kTestTimestamp); 28 packet_builder_.SetTimestamp(kTestTimestamp);
75 packet_builder_.SetPayloadType(kTestPayloadType); 29 packet_builder_.SetPayloadType(kTestPayloadType);
76 packet_builder_.SetMarkerBit(true); // Only one packet. 30 packet_builder_.SetMarkerBit(true); // Only one packet.
31 cast_header_.sender_ssrc = kTestSsrc;
32 cast_header_.sequence_number = kTestSeqNum;
33 cast_header_.rtp_timestamp = kTestTimestamp;
34 cast_header_.payload_type = kTestPayloadType;
35 cast_header_.marker = true;
77 } 36 }
78 37
79 virtual ~RtpParserTest() {} 38 virtual ~RtpParserTest() {}
80 39
81 void PopulateConfig() { 40 void ExpectParsesPacket() {
82 config_.payload_type = kTestPayloadType; 41 RtpCastHeader parsed_header;
83 config_.ssrc = kTestSsrc; 42 const uint8* payload = NULL;
43 size_t payload_size = -1;
44 EXPECT_TRUE(rtp_parser_.ParsePacket(
45 packet_, kPacketLength, &parsed_header, &payload, &payload_size));
46
47 EXPECT_EQ(cast_header_.marker, parsed_header.marker);
48 EXPECT_EQ(cast_header_.payload_type, parsed_header.payload_type);
49 EXPECT_EQ(cast_header_.sequence_number, parsed_header.sequence_number);
50 EXPECT_EQ(cast_header_.rtp_timestamp, parsed_header.rtp_timestamp);
51 EXPECT_EQ(cast_header_.sender_ssrc, parsed_header.sender_ssrc);
52
53 EXPECT_EQ(cast_header_.is_key_frame, parsed_header.is_key_frame);
54 EXPECT_EQ(cast_header_.frame_id, parsed_header.frame_id);
55 EXPECT_EQ(cast_header_.packet_id, parsed_header.packet_id);
56 EXPECT_EQ(cast_header_.max_packet_id, parsed_header.max_packet_id);
57 EXPECT_EQ(cast_header_.reference_frame_id,
58 parsed_header.reference_frame_id);
59
60 EXPECT_TRUE(!!payload);
61 EXPECT_NE(static_cast<size_t>(-1), payload_size);
62 }
63
64 void ExpectDoesNotParsePacket() {
65 RtpCastHeader parsed_header;
66 const uint8* payload = NULL;
67 size_t payload_size = -1;
68 EXPECT_FALSE(rtp_parser_.ParsePacket(
69 packet_, kPacketLength, &parsed_header, &payload, &payload_size));
84 } 70 }
85 71
86 RtpPacketBuilder packet_builder_; 72 RtpPacketBuilder packet_builder_;
87 scoped_ptr<RtpTestParser> rtp_parser_; 73 uint8 packet_[kPacketLength];
88 RtpParserConfig config_; 74 RtpParser rtp_parser_;
89 RtpCastHeader cast_header_; 75 RtpCastHeader cast_header_;
90 }; 76 };
91 77
92 TEST_F(RtpParserTest, ParseDefaultCastPacket) { 78 TEST_F(RtpParserTest, ParseDefaultCastPacket) {
93 // Build generic data packet. 79 packet_builder_.BuildHeader(packet_, kPacketLength);
94 uint8 packet[kPacketLength]; 80 ExpectParsesPacket();
95 packet_builder_.BuildHeader(packet, kPacketLength);
96 // Parse packet as is.
97 RtpCastHeader rtp_header;
98 rtp_parser_->SetExpectedHeader(cast_header_);
99 EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
100 } 81 }
101 82
102 TEST_F(RtpParserTest, ParseNonDefaultCastPacket) { 83 TEST_F(RtpParserTest, ParseNonDefaultCastPacket) {
103 // Build generic data packet.
104 uint8 packet[kPacketLength];
105 packet_builder_.SetKeyFrame(true); 84 packet_builder_.SetKeyFrame(true);
106 packet_builder_.SetFrameId(10); 85 packet_builder_.SetFrameIds(10, 10);
107 packet_builder_.SetPacketId(5); 86 packet_builder_.SetPacketId(5);
108 packet_builder_.SetMaxPacketId(15); 87 packet_builder_.SetMaxPacketId(15);
109 packet_builder_.SetMarkerBit(false); 88 packet_builder_.SetMarkerBit(false);
110 packet_builder_.BuildHeader(packet, kPacketLength); 89 packet_builder_.BuildHeader(packet_, kPacketLength);
111 cast_header_.is_key_frame = true; 90 cast_header_.is_key_frame = true;
112 cast_header_.frame_id = 10; 91 cast_header_.frame_id = 10;
92 cast_header_.reference_frame_id = 10;
113 cast_header_.packet_id = 5; 93 cast_header_.packet_id = 5;
114 cast_header_.max_packet_id = 15; 94 cast_header_.max_packet_id = 15;
115 rtp_parser_->SetExpectedHeader(cast_header_); 95 cast_header_.marker = false;
116 // Parse packet as is. 96 ExpectParsesPacket();
117 RtpCastHeader rtp_header;
118 EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
119 } 97 }
120 98
121 TEST_F(RtpParserTest, TooBigPacketId) { 99 TEST_F(RtpParserTest, TooBigPacketId) {
122 // Build generic data packet.
123 uint8 packet[kPacketLength];
124 packet_builder_.SetKeyFrame(true); 100 packet_builder_.SetKeyFrame(true);
125 packet_builder_.SetFrameId(10); 101 packet_builder_.SetFrameIds(10, 10);
126 packet_builder_.SetPacketId(15); 102 packet_builder_.SetPacketId(15);
127 packet_builder_.SetMaxPacketId(5); 103 packet_builder_.SetMaxPacketId(5);
128 packet_builder_.BuildHeader(packet, kPacketLength); 104 packet_builder_.BuildHeader(packet_, kPacketLength);
129 // Parse packet as is. 105 cast_header_.is_key_frame = true;
130 RtpCastHeader rtp_header; 106 cast_header_.frame_id = 10;
131 EXPECT_FALSE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header)); 107 cast_header_.reference_frame_id = 10;
108 cast_header_.packet_id = 15;
109 cast_header_.max_packet_id = 5;
110 ExpectDoesNotParsePacket();
132 } 111 }
133 112
134 TEST_F(RtpParserTest, MaxPacketId) { 113 TEST_F(RtpParserTest, MaxPacketId) {
135 // Build generic data packet.
136 uint8 packet[kPacketLength];
137 packet_builder_.SetKeyFrame(true); 114 packet_builder_.SetKeyFrame(true);
138 packet_builder_.SetFrameId(10); 115 packet_builder_.SetFrameIds(10, 10);
139 packet_builder_.SetPacketId(65535); 116 packet_builder_.SetPacketId(65535);
140 packet_builder_.SetMaxPacketId(65535); 117 packet_builder_.SetMaxPacketId(65535);
141 packet_builder_.BuildHeader(packet, kPacketLength); 118 packet_builder_.BuildHeader(packet_, kPacketLength);
142 cast_header_.is_key_frame = true; 119 cast_header_.is_key_frame = true;
143 cast_header_.frame_id = 10; 120 cast_header_.frame_id = 10;
121 cast_header_.reference_frame_id = 10;
144 cast_header_.packet_id = 65535; 122 cast_header_.packet_id = 65535;
145 cast_header_.max_packet_id = 65535; 123 cast_header_.max_packet_id = 65535;
146 rtp_parser_->SetExpectedHeader(cast_header_); 124 ExpectParsesPacket();
147 // Parse packet as is.
148 RtpCastHeader rtp_header;
149 EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header));
150 } 125 }
151 126
152 TEST_F(RtpParserTest, InvalidPayloadType) { 127 TEST_F(RtpParserTest, InvalidPayloadType) {
153 // Build generic data packet.
154 uint8 packet[kPacketLength];
155 packet_builder_.SetKeyFrame(true); 128 packet_builder_.SetKeyFrame(true);
156 packet_builder_.SetFrameId(10); 129 packet_builder_.SetFrameIds(10, 10);
157 packet_builder_.SetPacketId(65535); 130 packet_builder_.SetPacketId(65535);
158 packet_builder_.SetMaxPacketId(65535); 131 packet_builder_.SetMaxPacketId(65535);
159 packet_builder_.SetPayloadType(kTestPayloadType - 1); 132 packet_builder_.SetPayloadType(kTestPayloadType - 1);
160 packet_builder_.BuildHeader(packet, kPacketLength); 133 packet_builder_.BuildHeader(packet_, kPacketLength);
161 // Parse packet as is. 134 cast_header_.is_key_frame = true;
162 RtpCastHeader rtp_header; 135 cast_header_.frame_id = 10;
163 EXPECT_FALSE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header)); 136 cast_header_.reference_frame_id = 10;
137 cast_header_.packet_id = 65535;
138 cast_header_.max_packet_id = 65535;
139 cast_header_.payload_type = kTestPayloadType - 1;
140 ExpectDoesNotParsePacket();
164 } 141 }
165 142
166 TEST_F(RtpParserTest, InvalidSsrc) { 143 TEST_F(RtpParserTest, InvalidSsrc) {
167 // Build generic data packet.
168 uint8 packet[kPacketLength];
169 packet_builder_.SetKeyFrame(true); 144 packet_builder_.SetKeyFrame(true);
170 packet_builder_.SetFrameId(10); 145 packet_builder_.SetFrameIds(10, 10);
171 packet_builder_.SetPacketId(65535); 146 packet_builder_.SetPacketId(65535);
172 packet_builder_.SetMaxPacketId(65535); 147 packet_builder_.SetMaxPacketId(65535);
173 packet_builder_.SetSsrc(kTestSsrc - 1); 148 packet_builder_.SetSsrc(kTestSsrc - 1);
174 packet_builder_.BuildHeader(packet, kPacketLength); 149 packet_builder_.BuildHeader(packet_, kPacketLength);
175 // Parse packet as is. 150 cast_header_.is_key_frame = true;
176 RtpCastHeader rtp_header; 151 cast_header_.frame_id = 10;
177 EXPECT_FALSE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header)); 152 cast_header_.reference_frame_id = 10;
153 cast_header_.packet_id = 65535;
154 cast_header_.max_packet_id = 65535;
155 cast_header_.sender_ssrc = kTestSsrc - 1;
156 ExpectDoesNotParsePacket();
178 } 157 }
179 158
180 TEST_F(RtpParserTest, ParseCastPacketWithoutReference) { 159 TEST_F(RtpParserTest, ParseCastPacketWithSpecificFrameReference) {
181 cast_header_.is_reference = false; 160 packet_builder_.SetFrameIds(kRefFrameId + 3, kRefFrameId);
182 cast_header_.reference_frame_id = 0; 161 packet_builder_.BuildHeader(packet_, kPacketLength);
183 packet_builder_.SetReferenceFrameId(kRefFrameId, false); 162 cast_header_.frame_id = kRefFrameId + 3;
163 cast_header_.reference_frame_id = kRefFrameId;
164 ExpectParsesPacket();
165 }
184 166
185 // Build generic data packet. 167 TEST_F(RtpParserTest, ParseExpandingFrameIdTo32Bits) {
186 uint8 packet[kPacketLength]; 168 const uint32 kMaxFrameId = 1000;
187 packet_builder_.BuildHeader(packet, kPacketLength); 169 packet_builder_.SetKeyFrame(true);
188 // Parse packet as is. 170 cast_header_.is_key_frame = true;
189 RtpCastHeader rtp_header; 171 for (uint32 frame_id = 0; frame_id <= kMaxFrameId; ++frame_id) {
190 rtp_parser_->SetExpectedHeader(cast_header_); 172 packet_builder_.SetFrameIds(frame_id, frame_id);
191 EXPECT_TRUE(rtp_parser_->ParsePacket(packet, kPacketLength, &rtp_header)); 173 packet_builder_.BuildHeader(packet_, kPacketLength);
174 cast_header_.frame_id = frame_id;
175 cast_header_.reference_frame_id = frame_id;
176 ExpectParsesPacket();
177 }
178 }
179
180 TEST_F(RtpParserTest, ParseExpandingReferenceFrameIdTo32Bits) {
181 const uint32 kMaxFrameId = 1000;
182 const uint32 kMaxBackReferenceOffset = 10;
183 packet_builder_.SetKeyFrame(false);
184 cast_header_.is_key_frame = false;
185 for (uint32 frame_id = kMaxBackReferenceOffset;
186 frame_id <= kMaxFrameId; ++frame_id) {
187 const uint32 reference_frame_id =
188 frame_id - base::RandInt(1, kMaxBackReferenceOffset);
189 packet_builder_.SetFrameIds(frame_id, reference_frame_id);
190 packet_builder_.BuildHeader(packet_, kPacketLength);
191 cast_header_.frame_id = frame_id;
192 cast_header_.reference_frame_id = reference_frame_id;
193 ExpectParsesPacket();
194 }
192 } 195 }
193 196
194 } // namespace cast 197 } // namespace cast
195 } // namespace media 198 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtp_receiver/rtp_parser/rtp_parser.cc ('k') | media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698