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

Side by Side Diff: media/cast/net/rtcp/rtcp_builder_unittest.cc

Issue 513313004: Cast: Re-factor rtcp_sender.cc into rtcp_builder.cc and do some cleanup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/test/simple_test_tick_clock.h" 6 #include "base/test/simple_test_tick_clock.h"
7 #include "media/cast/cast_defines.h" 7 #include "media/cast/cast_defines.h"
8 #include "media/cast/cast_environment.h" 8 #include "media/cast/cast_environment.h"
9 #include "media/cast/net/cast_transport_defines.h" 9 #include "media/cast/net/cast_transport_defines.h"
10 #include "media/cast/net/pacing/paced_sender.h" 10 #include "media/cast/net/pacing/paced_sender.h"
11 #include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h" 11 #include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
12 #include "media/cast/net/rtcp/rtcp_sender.h" 12 #include "media/cast/net/rtcp/rtcp_builder.h"
13 #include "media/cast/net/rtcp/rtcp_utility.h" 13 #include "media/cast/net/rtcp/rtcp_utility.h"
14 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" 14 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h"
15 #include "media/cast/test/fake_single_thread_task_runner.h" 15 #include "media/cast/test/fake_single_thread_task_runner.h"
16 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
17 17
18 namespace media { 18 namespace media {
19 namespace cast { 19 namespace cast {
20 20
21 namespace { 21 namespace {
22 static const uint32 kSendingSsrc = 0x12345678; 22 static const uint32 kSendingSsrc = 0x12345678;
(...skipping 10 matching lines...) Expand all
33 report_block.cumulative_lost = kLoss; // 24 bits valid. 33 report_block.cumulative_lost = kLoss; // 24 bits valid.
34 report_block.extended_high_sequence_number = kExtendedMax; 34 report_block.extended_high_sequence_number = kExtendedMax;
35 report_block.jitter = kTestJitter; 35 report_block.jitter = kTestJitter;
36 report_block.last_sr = kLastSr; 36 report_block.last_sr = kLastSr;
37 report_block.delay_since_last_sr = kDelayLastSr; 37 report_block.delay_since_last_sr = kDelayLastSr;
38 return report_block; 38 return report_block;
39 } 39 }
40 40
41 } // namespace 41 } // namespace
42 42
43 class TestRtcpTransport : public PacedPacketSender {
44 public:
45 TestRtcpTransport() : packet_count_(0) {}
46 43
47 virtual bool SendRtcpPacket(uint32 ssrc, 44 class RtcpBuilderTest : public ::testing::Test {
48 PacketRef packet) OVERRIDE { 45 protected:
49 EXPECT_EQ(expected_packet_.size(), packet->data.size()); 46 RtcpBuilderTest()
50 if (expected_packet_.size() != packet->data.size()) 47 : testing_clock_(new base::SimpleTestTickClock()),
51 return false; 48 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
52 EXPECT_EQ(0, memcmp(&expected_packet_[0], 49 rtcp_builder_(new RtcpBuilder(kSendingSsrc)) {}
53 &packet->data[0], 50
54 packet->data.size())); 51 void ExpectPacketEQ(scoped_ptr<Packet> golden_packet,
55 packet_count_++; 52 PacketRef packet) {
56 return true; 53 EXPECT_EQ(golden_packet->size(), packet->data.size());
54 if (golden_packet->size() == packet->data.size()) {
55 for (size_t x = 0; x < golden_packet->size(); x++) {
56 EXPECT_EQ((*golden_packet)[x], packet->data[x]);
57 if ((*golden_packet)[x] != packet->data[x])
58 break;
59 }
60 }
57 } 61 }
58 62
59 virtual bool SendPackets( 63 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
60 const SendPacketVector& packets) OVERRIDE { 64 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
miu 2014/09/03 22:28:07 Seems like you can get rid of task_runner_ (and it
hubbe 2014/09/04 22:21:19 Done.
61 return false; 65 scoped_ptr<RtcpBuilder> rtcp_builder_;
62 }
63 virtual bool ResendPackets(
64 const SendPacketVector& packets,
65 const DedupInfo& dedup_info) OVERRIDE {
66 return false;
67 }
68 66
69 virtual void CancelSendingPacket( 67 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest);
70 const PacketKey& packet_key) OVERRIDE {
71 }
72
73 void SetExpectedRtcpPacket(scoped_ptr<Packet> packet) {
74 expected_packet_.swap(*packet);
75 }
76
77 int packet_count() const { return packet_count_; }
78
79 private:
80 Packet expected_packet_;
81 int packet_count_;
82
83 DISALLOW_COPY_AND_ASSIGN(TestRtcpTransport);
84 }; 68 };
85 69
86 class RtcpSenderTest : public ::testing::Test { 70 TEST_F(RtcpBuilderTest, RtcpReceiverReport) {
87 protected:
88 RtcpSenderTest()
89 : testing_clock_(new base::SimpleTestTickClock()),
90 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
91 cast_environment_(new CastEnvironment(
92 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
93 task_runner_,
94 task_runner_,
95 task_runner_)),
96 rtcp_sender_(new RtcpSender(&test_transport_, kSendingSsrc)) {}
97
98 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
99 TestRtcpTransport test_transport_;
100 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
101 scoped_refptr<CastEnvironment> cast_environment_;
102 scoped_ptr<RtcpSender> rtcp_sender_;
103
104 DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest);
105 };
106
107 TEST_F(RtcpSenderTest, RtcpReceiverReport) {
108 // Receiver report with report block. 71 // Receiver report with report block.
109 TestRtcpPacketBuilder p2; 72 TestRtcpPacketBuilder p2;
110 p2.AddRr(kSendingSsrc, 1); 73 p2.AddRr(kSendingSsrc, 1);
111 p2.AddRb(kMediaSsrc); 74 p2.AddRb(kMediaSsrc);
112 test_transport_.SetExpectedRtcpPacket(p2.GetPacket().Pass());
113 75
114 RtcpReportBlock report_block = GetReportBlock(); 76 RtcpReportBlock report_block = GetReportBlock();
115 77
116 rtcp_sender_->SendRtcpFromRtpReceiver( 78 ExpectPacketEQ(
117 &report_block, NULL, NULL, NULL, kDefaultDelay); 79 p2.GetPacket().Pass(),
118 80 rtcp_builder_->BuildRtcpFromReceiver(
119 EXPECT_EQ(1, test_transport_.packet_count()); 81 &report_block, NULL, NULL, NULL, kDefaultDelay));
120 } 82 }
121 83
122 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtr) { 84 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithRrtr) {
123 // Receiver report with report block. 85 // Receiver report with report block.
124 TestRtcpPacketBuilder p; 86 TestRtcpPacketBuilder p;
125 p.AddRr(kSendingSsrc, 1); 87 p.AddRr(kSendingSsrc, 1);
126 p.AddRb(kMediaSsrc); 88 p.AddRb(kMediaSsrc);
127 p.AddXrHeader(kSendingSsrc); 89 p.AddXrHeader(kSendingSsrc);
128 p.AddXrRrtrBlock(); 90 p.AddXrRrtrBlock();
129 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
130 91
131 RtcpReportBlock report_block = GetReportBlock(); 92 RtcpReportBlock report_block = GetReportBlock();
132 93
133 RtcpReceiverReferenceTimeReport rrtr; 94 RtcpReceiverReferenceTimeReport rrtr;
134 rrtr.ntp_seconds = kNtpHigh; 95 rrtr.ntp_seconds = kNtpHigh;
135 rrtr.ntp_fraction = kNtpLow; 96 rrtr.ntp_fraction = kNtpLow;
136 97
137 rtcp_sender_->SendRtcpFromRtpReceiver( 98 ExpectPacketEQ(p.GetPacket().Pass(),
138 &report_block, 99 rtcp_builder_->BuildRtcpFromReceiver(
139 &rrtr, 100 &report_block,
140 NULL, 101 &rrtr,
141 NULL, 102 NULL,
142 kDefaultDelay); 103 NULL,
143 104 kDefaultDelay));
144 EXPECT_EQ(1, test_transport_.packet_count());
145 } 105 }
146 106
147 TEST_F(RtcpSenderTest, RtcpReceiverReportWithCast) { 107 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithCast) {
148 // Receiver report with report block. 108 // Receiver report with report block.
149 TestRtcpPacketBuilder p; 109 TestRtcpPacketBuilder p;
150 p.AddRr(kSendingSsrc, 1); 110 p.AddRr(kSendingSsrc, 1);
151 p.AddRb(kMediaSsrc); 111 p.AddRb(kMediaSsrc);
152 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); 112 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
153 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
154 113
155 RtcpReportBlock report_block = GetReportBlock(); 114 RtcpReportBlock report_block = GetReportBlock();
156 115
157 RtcpCastMessage cast_message(kMediaSsrc); 116 RtcpCastMessage cast_message(kMediaSsrc);
158 cast_message.ack_frame_id = kAckFrameId; 117 cast_message.ack_frame_id = kAckFrameId;
159 PacketIdSet missing_packets; 118 PacketIdSet missing_packets;
160 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; 119 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets;
161 120
162 missing_packets.insert(kLostPacketId1); 121 missing_packets.insert(kLostPacketId1);
163 missing_packets.insert(kLostPacketId2); 122 missing_packets.insert(kLostPacketId2);
164 missing_packets.insert(kLostPacketId3); 123 missing_packets.insert(kLostPacketId3);
165 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = 124 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] =
166 missing_packets; 125 missing_packets;
167 126
168 rtcp_sender_->SendRtcpFromRtpReceiver( 127 ExpectPacketEQ(p.GetPacket().Pass(),
169 &report_block, 128 rtcp_builder_->BuildRtcpFromReceiver(
170 NULL, 129 &report_block,
171 &cast_message, 130 NULL,
172 NULL, 131 &cast_message,
173 kDefaultDelay); 132 NULL,
174 133 kDefaultDelay));
175 EXPECT_EQ(1, test_transport_.packet_count());
176 } 134 }
177 135
178 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtraAndCastMessage) { 136 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithRrtraAndCastMessage) {
179 TestRtcpPacketBuilder p; 137 TestRtcpPacketBuilder p;
180 p.AddRr(kSendingSsrc, 1); 138 p.AddRr(kSendingSsrc, 1);
181 p.AddRb(kMediaSsrc); 139 p.AddRb(kMediaSsrc);
182 p.AddXrHeader(kSendingSsrc); 140 p.AddXrHeader(kSendingSsrc);
183 p.AddXrRrtrBlock(); 141 p.AddXrRrtrBlock();
184 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); 142 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
185 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
186 143
187 RtcpReportBlock report_block = GetReportBlock(); 144 RtcpReportBlock report_block = GetReportBlock();
188 145
189 RtcpReceiverReferenceTimeReport rrtr; 146 RtcpReceiverReferenceTimeReport rrtr;
190 rrtr.ntp_seconds = kNtpHigh; 147 rrtr.ntp_seconds = kNtpHigh;
191 rrtr.ntp_fraction = kNtpLow; 148 rrtr.ntp_fraction = kNtpLow;
192 149
193 RtcpCastMessage cast_message(kMediaSsrc); 150 RtcpCastMessage cast_message(kMediaSsrc);
194 cast_message.ack_frame_id = kAckFrameId; 151 cast_message.ack_frame_id = kAckFrameId;
195 PacketIdSet missing_packets; 152 PacketIdSet missing_packets;
196 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; 153 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets;
197 154
198 missing_packets.insert(kLostPacketId1); 155 missing_packets.insert(kLostPacketId1);
199 missing_packets.insert(kLostPacketId2); 156 missing_packets.insert(kLostPacketId2);
200 missing_packets.insert(kLostPacketId3); 157 missing_packets.insert(kLostPacketId3);
201 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = 158 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] =
202 missing_packets; 159 missing_packets;
203 160
204 rtcp_sender_->SendRtcpFromRtpReceiver( 161 ExpectPacketEQ(p.GetPacket().Pass(),
205 &report_block, 162 rtcp_builder_->BuildRtcpFromReceiver(
206 &rrtr, 163 &report_block,
207 &cast_message, 164 &rrtr,
208 NULL, 165 &cast_message,
209 kDefaultDelay); 166 NULL,
210 167 kDefaultDelay));
211 EXPECT_EQ(1, test_transport_.packet_count());
212 } 168 }
213 169
214 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { 170 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
215 static const uint32 kTimeBaseMs = 12345678; 171 static const uint32 kTimeBaseMs = 12345678;
216 static const uint32 kTimeDelayMs = 10; 172 static const uint32 kTimeDelayMs = 10;
217 173
218 TestRtcpPacketBuilder p; 174 TestRtcpPacketBuilder p;
219 p.AddRr(kSendingSsrc, 1); 175 p.AddRr(kSendingSsrc, 1);
220 p.AddRb(kMediaSsrc); 176 p.AddRb(kMediaSsrc);
221 p.AddXrHeader(kSendingSsrc); 177 p.AddXrHeader(kSendingSsrc);
222 p.AddXrRrtrBlock(); 178 p.AddXrRrtrBlock();
223 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); 179 p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay);
224 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
225 180
226 RtcpReportBlock report_block = GetReportBlock(); 181 RtcpReportBlock report_block = GetReportBlock();
227 182
228 RtcpReceiverReferenceTimeReport rrtr; 183 RtcpReceiverReferenceTimeReport rrtr;
229 rrtr.ntp_seconds = kNtpHigh; 184 rrtr.ntp_seconds = kNtpHigh;
230 rrtr.ntp_fraction = kNtpLow; 185 rrtr.ntp_fraction = kNtpLow;
231 186
232 RtcpCastMessage cast_message(kMediaSsrc); 187 RtcpCastMessage cast_message(kMediaSsrc);
233 cast_message.ack_frame_id = kAckFrameId; 188 cast_message.ack_frame_id = kAckFrameId;
234 PacketIdSet missing_packets; 189 PacketIdSet missing_packets;
235 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; 190 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets;
236 191
237 missing_packets.insert(kLostPacketId1); 192 missing_packets.insert(kLostPacketId1);
238 missing_packets.insert(kLostPacketId2); 193 missing_packets.insert(kLostPacketId2);
239 missing_packets.insert(kLostPacketId3); 194 missing_packets.insert(kLostPacketId3);
240 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = 195 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] =
241 missing_packets; 196 missing_packets;
242 197
243 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 198 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
244 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 199 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
245 200
246 rtcp_sender_->SendRtcpFromRtpReceiver( 201 ExpectPacketEQ(p.GetPacket().Pass(),
247 &report_block, 202 rtcp_builder_->BuildRtcpFromReceiver(
248 &rrtr, 203 &report_block,
249 &cast_message, 204 &rrtr,
250 &rtcp_events, 205 &cast_message,
251 kDefaultDelay); 206 &rtcp_events,
207 kDefaultDelay));
252 208
253 base::SimpleTestTickClock testing_clock; 209 base::SimpleTestTickClock testing_clock;
254 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 210 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
255 211
256 p.AddReceiverLog(kSendingSsrc); 212 p.AddReceiverLog(kSendingSsrc);
257 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); 213 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
258 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 214 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
259 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); 215 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs);
260 216
261 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
262
263 FrameEvent frame_event; 217 FrameEvent frame_event;
264 frame_event.rtp_timestamp = kRtpTimestamp; 218 frame_event.rtp_timestamp = kRtpTimestamp;
265 frame_event.type = FRAME_ACK_SENT; 219 frame_event.type = FRAME_ACK_SENT;
266 frame_event.media_type = VIDEO_EVENT; 220 frame_event.media_type = VIDEO_EVENT;
267 frame_event.timestamp = testing_clock.NowTicks(); 221 frame_event.timestamp = testing_clock.NowTicks();
268 event_subscriber.OnReceiveFrameEvent(frame_event); 222 event_subscriber.OnReceiveFrameEvent(frame_event);
269 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 223 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
270 224
271 PacketEvent packet_event; 225 PacketEvent packet_event;
272 packet_event.rtp_timestamp = kRtpTimestamp; 226 packet_event.rtp_timestamp = kRtpTimestamp;
273 packet_event.type = PACKET_RECEIVED; 227 packet_event.type = PACKET_RECEIVED;
274 packet_event.media_type = VIDEO_EVENT; 228 packet_event.media_type = VIDEO_EVENT;
275 packet_event.timestamp = testing_clock.NowTicks(); 229 packet_event.timestamp = testing_clock.NowTicks();
276 packet_event.packet_id = kLostPacketId1; 230 packet_event.packet_id = kLostPacketId1;
277 event_subscriber.OnReceivePacketEvent(packet_event); 231 event_subscriber.OnReceivePacketEvent(packet_event);
278 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 232 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
279 EXPECT_EQ(2u, rtcp_events.size()); 233 EXPECT_EQ(2u, rtcp_events.size());
280 234
281 rtcp_sender_->SendRtcpFromRtpReceiver( 235 ExpectPacketEQ(
282 &report_block, 236 p.GetPacket().Pass(),
283 &rrtr, 237 rtcp_builder_->BuildRtcpFromReceiver(
284 &cast_message, 238 &report_block,
285 &rtcp_events, 239 &rrtr,
286 kDefaultDelay); 240 &cast_message,
287 241 &rtcp_events,
288 EXPECT_EQ(2, test_transport_.packet_count()); 242 kDefaultDelay));
289 } 243 }
290 244
291 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { 245 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithOversizedFrameLog) {
292 static const uint32 kTimeBaseMs = 12345678; 246 static const uint32 kTimeBaseMs = 12345678;
293 static const uint32 kTimeDelayMs = 10; 247 static const uint32 kTimeDelayMs = 10;
294 248
295 TestRtcpPacketBuilder p; 249 TestRtcpPacketBuilder p;
296 p.AddRr(kSendingSsrc, 1); 250 p.AddRr(kSendingSsrc, 1);
297 p.AddRb(kMediaSsrc); 251 p.AddRb(kMediaSsrc);
298 252
299 RtcpReportBlock report_block = GetReportBlock(); 253 RtcpReportBlock report_block = GetReportBlock();
300 254
301 base::SimpleTestTickClock testing_clock; 255 base::SimpleTestTickClock testing_clock;
(...skipping 11 matching lines...) Expand all
313 p.AddReceiverFrameLog( 267 p.AddReceiverFrameLog(
314 kRtpTimestamp + 2345, 268 kRtpTimestamp + 2345,
315 num_events, 269 num_events,
316 kTimeBaseMs + (kRtcpMaxReceiverLogMessages - num_events) * kTimeDelayMs); 270 kTimeBaseMs + (kRtcpMaxReceiverLogMessages - num_events) * kTimeDelayMs);
317 for (int i = 0; i < num_events; i++) { 271 for (int i = 0; i < num_events; i++) {
318 p.AddReceiverEventLog( 272 p.AddReceiverEventLog(
319 kLostPacketId1, PACKET_RECEIVED, 273 kLostPacketId1, PACKET_RECEIVED,
320 static_cast<uint16>(kTimeDelayMs * i)); 274 static_cast<uint16>(kTimeDelayMs * i));
321 } 275 }
322 276
323 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
324 277
325 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 278 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
326 FrameEvent frame_event; 279 FrameEvent frame_event;
327 frame_event.rtp_timestamp = kRtpTimestamp; 280 frame_event.rtp_timestamp = kRtpTimestamp;
328 frame_event.type = FRAME_ACK_SENT; 281 frame_event.type = FRAME_ACK_SENT;
329 frame_event.media_type = VIDEO_EVENT; 282 frame_event.media_type = VIDEO_EVENT;
330 frame_event.timestamp = testing_clock.NowTicks(); 283 frame_event.timestamp = testing_clock.NowTicks();
331 event_subscriber.OnReceiveFrameEvent(frame_event); 284 event_subscriber.OnReceiveFrameEvent(frame_event);
332 285
333 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 286 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
334 PacketEvent packet_event; 287 PacketEvent packet_event;
335 packet_event.rtp_timestamp = kRtpTimestamp + 2345; 288 packet_event.rtp_timestamp = kRtpTimestamp + 2345;
336 packet_event.type = PACKET_RECEIVED; 289 packet_event.type = PACKET_RECEIVED;
337 packet_event.media_type = VIDEO_EVENT; 290 packet_event.media_type = VIDEO_EVENT;
338 packet_event.timestamp = testing_clock.NowTicks(); 291 packet_event.timestamp = testing_clock.NowTicks();
339 packet_event.packet_id = kLostPacketId1; 292 packet_event.packet_id = kLostPacketId1;
340 event_subscriber.OnReceivePacketEvent(packet_event); 293 event_subscriber.OnReceivePacketEvent(packet_event);
341 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 294 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
342 } 295 }
343 296
344 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 297 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
345 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 298 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
346 299
347 rtcp_sender_->SendRtcpFromRtpReceiver( 300 ExpectPacketEQ(p.GetPacket().Pass(),
348 &report_block, 301 rtcp_builder_->BuildRtcpFromReceiver(
349 NULL, 302 &report_block,
350 NULL, 303 NULL,
351 &rtcp_events, 304 NULL,
352 kDefaultDelay); 305 &rtcp_events,
353 306 kDefaultDelay));
354 EXPECT_EQ(1, test_transport_.packet_count());
355 } 307 }
356 308
357 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { 309 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithTooManyLogFrames) {
358 static const uint32 kTimeBaseMs = 12345678; 310 static const uint32 kTimeBaseMs = 12345678;
359 static const uint32 kTimeDelayMs = 10; 311 static const uint32 kTimeDelayMs = 10;
360 312
361 TestRtcpPacketBuilder p; 313 TestRtcpPacketBuilder p;
362 p.AddRr(kSendingSsrc, 1); 314 p.AddRr(kSendingSsrc, 1);
363 p.AddRb(kMediaSsrc); 315 p.AddRb(kMediaSsrc);
364 316
365 RtcpReportBlock report_block = GetReportBlock(); 317 RtcpReportBlock report_block = GetReportBlock();
366 318
367 base::SimpleTestTickClock testing_clock; 319 base::SimpleTestTickClock testing_clock;
368 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 320 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
369 321
370 p.AddReceiverLog(kSendingSsrc); 322 p.AddReceiverLog(kSendingSsrc);
371 323
372 int remaining_bytes = kMaxReceiverLogBytes; 324 int remaining_bytes = kMaxReceiverLogBytes;
373 remaining_bytes -= kRtcpCastLogHeaderSize; 325 remaining_bytes -= kRtcpCastLogHeaderSize;
374 326
375 int num_events = 327 int num_events =
376 remaining_bytes / (kRtcpReceiverFrameLogSize + kRtcpReceiverEventLogSize); 328 remaining_bytes / (kRtcpReceiverFrameLogSize + kRtcpReceiverEventLogSize);
377 329
378 // The last |num_events| events are sent due to receiver log size cap. 330 // The last |num_events| events are sent due to receiver log size cap.
379 for (size_t i = kRtcpMaxReceiverLogMessages - num_events; 331 for (size_t i = kRtcpMaxReceiverLogMessages - num_events;
380 i < kRtcpMaxReceiverLogMessages; 332 i < kRtcpMaxReceiverLogMessages;
381 ++i) { 333 ++i) {
382 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs); 334 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs);
383 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 335 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
384 } 336 }
385 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
386 337
387 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 338 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
388 339
389 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 340 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
390 FrameEvent frame_event; 341 FrameEvent frame_event;
391 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i); 342 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i);
392 frame_event.type = FRAME_ACK_SENT; 343 frame_event.type = FRAME_ACK_SENT;
393 frame_event.media_type = VIDEO_EVENT; 344 frame_event.media_type = VIDEO_EVENT;
394 frame_event.timestamp = testing_clock.NowTicks(); 345 frame_event.timestamp = testing_clock.NowTicks();
395 event_subscriber.OnReceiveFrameEvent(frame_event); 346 event_subscriber.OnReceiveFrameEvent(frame_event);
396 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 347 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
397 } 348 }
398 349
399 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 350 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
400 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 351 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
401 352
402 rtcp_sender_->SendRtcpFromRtpReceiver( 353 ExpectPacketEQ(p.GetPacket().Pass(),
403 &report_block, 354 rtcp_builder_->BuildRtcpFromReceiver(
404 NULL, 355 &report_block,
405 NULL, 356 NULL,
406 &rtcp_events, 357 NULL,
407 kDefaultDelay); 358 &rtcp_events,
408 359 kDefaultDelay));
409 EXPECT_EQ(1, test_transport_.packet_count());
410 } 360 }
411 361
412 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOldLogFrames) { 362 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithOldLogFrames) {
413 static const uint32 kTimeBaseMs = 12345678; 363 static const uint32 kTimeBaseMs = 12345678;
414 364
415 TestRtcpPacketBuilder p; 365 TestRtcpPacketBuilder p;
416 p.AddRr(kSendingSsrc, 1); 366 p.AddRr(kSendingSsrc, 1);
417 p.AddRb(kMediaSsrc); 367 p.AddRb(kMediaSsrc);
418 368
419 RtcpReportBlock report_block = GetReportBlock(); 369 RtcpReportBlock report_block = GetReportBlock();
420 370
421 base::SimpleTestTickClock testing_clock; 371 base::SimpleTestTickClock testing_clock;
422 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 372 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
423 373
424 p.AddReceiverLog(kSendingSsrc); 374 p.AddReceiverLog(kSendingSsrc);
425 375
426 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. 376 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart.
427 // Only last 10 events will be sent because the first event is more than 377 // Only last 10 events will be sent because the first event is more than
428 // 4095 milliseconds away from latest event. 378 // 4095 milliseconds away from latest event.
429 const int kTimeBetweenEventsMs = 410; 379 const int kTimeBetweenEventsMs = 410;
430 p.AddReceiverFrameLog(kRtpTimestamp, 10, kTimeBaseMs + kTimeBetweenEventsMs); 380 p.AddReceiverFrameLog(kRtpTimestamp, 10, kTimeBaseMs + kTimeBetweenEventsMs);
431 for (int i = 0; i < 10; ++i) { 381 for (int i = 0; i < 10; ++i) {
432 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs); 382 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs);
433 } 383 }
434 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
435 384
436 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 385 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
437 for (int i = 0; i < 11; ++i) { 386 for (int i = 0; i < 11; ++i) {
438 FrameEvent frame_event; 387 FrameEvent frame_event;
439 frame_event.rtp_timestamp = kRtpTimestamp; 388 frame_event.rtp_timestamp = kRtpTimestamp;
440 frame_event.type = FRAME_ACK_SENT; 389 frame_event.type = FRAME_ACK_SENT;
441 frame_event.media_type = VIDEO_EVENT; 390 frame_event.media_type = VIDEO_EVENT;
442 frame_event.timestamp = testing_clock.NowTicks(); 391 frame_event.timestamp = testing_clock.NowTicks();
443 event_subscriber.OnReceiveFrameEvent(frame_event); 392 event_subscriber.OnReceiveFrameEvent(frame_event);
444 testing_clock.Advance( 393 testing_clock.Advance(
445 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); 394 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs));
446 } 395 }
447 396
448 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 397 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
449 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 398 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
450 399
451 rtcp_sender_->SendRtcpFromRtpReceiver( 400 ExpectPacketEQ(p.GetPacket().Pass(),
452 &report_block, 401 rtcp_builder_->BuildRtcpFromReceiver(
453 NULL, 402 &report_block,
454 NULL, 403 NULL,
455 &rtcp_events, 404 NULL,
456 kDefaultDelay); 405 &rtcp_events,
457 406 kDefaultDelay));
458 EXPECT_EQ(1, test_transport_.packet_count());
459 } 407 }
460 408
461 TEST_F(RtcpSenderTest, RtcpReceiverReportRedundancy) { 409 TEST_F(RtcpBuilderTest, RtcpReceiverReportRedundancy) {
462 uint32 time_base_ms = 12345678; 410 uint32 time_base_ms = 12345678;
463 int kTimeBetweenEventsMs = 10; 411 int kTimeBetweenEventsMs = 10;
464 412
465 RtcpReportBlock report_block = GetReportBlock(); 413 RtcpReportBlock report_block = GetReportBlock();
466 414
467 base::SimpleTestTickClock testing_clock; 415 base::SimpleTestTickClock testing_clock;
468 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms)); 416 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms));
469 417
470 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 418 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
471 size_t packet_count = kReceiveLogMessageHistorySize + 10; 419 size_t packet_count = kReceiveLogMessageHistorySize + 10;
(...skipping 14 matching lines...) Expand all
486 if (i >= kFirstRedundancyOffset) { 434 if (i >= kFirstRedundancyOffset) {
487 p.AddReceiverFrameLog( 435 p.AddReceiverFrameLog(
488 kRtpTimestamp, 436 kRtpTimestamp,
489 1, 437 1,
490 time_base_ms - kFirstRedundancyOffset * kTimeBetweenEventsMs); 438 time_base_ms - kFirstRedundancyOffset * kTimeBetweenEventsMs);
491 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 439 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
492 } 440 }
493 p.AddReceiverFrameLog(kRtpTimestamp, 1, time_base_ms); 441 p.AddReceiverFrameLog(kRtpTimestamp, 1, time_base_ms);
494 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 442 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
495 443
496 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
497
498 FrameEvent frame_event; 444 FrameEvent frame_event;
499 frame_event.rtp_timestamp = kRtpTimestamp; 445 frame_event.rtp_timestamp = kRtpTimestamp;
500 frame_event.type = FRAME_ACK_SENT; 446 frame_event.type = FRAME_ACK_SENT;
501 frame_event.media_type = VIDEO_EVENT; 447 frame_event.media_type = VIDEO_EVENT;
502 frame_event.timestamp = testing_clock.NowTicks(); 448 frame_event.timestamp = testing_clock.NowTicks();
503 event_subscriber.OnReceiveFrameEvent(frame_event); 449 event_subscriber.OnReceiveFrameEvent(frame_event);
504 450
505 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 451 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events;
506 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 452 event_subscriber.GetRtcpEventsAndReset(&rtcp_events);
507 453
508 rtcp_sender_->SendRtcpFromRtpReceiver( 454 ExpectPacketEQ(p.GetPacket().Pass(),
509 &report_block, 455 rtcp_builder_->BuildRtcpFromReceiver(
510 NULL, 456 &report_block,
511 NULL, 457 NULL,
512 &rtcp_events, 458 NULL,
513 kDefaultDelay); 459 &rtcp_events,
460 kDefaultDelay));
514 461
515 testing_clock.Advance( 462 testing_clock.Advance(
516 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); 463 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs));
517 time_base_ms += kTimeBetweenEventsMs; 464 time_base_ms += kTimeBetweenEventsMs;
518 } 465 }
519
520 EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count());
521 } 466 }
522 467
523 TEST_F(RtcpSenderTest, RtcpSenderReport) { 468 TEST_F(RtcpBuilderTest, RtcpSenderReport) {
524 RtcpSenderInfo sender_info; 469 RtcpSenderInfo sender_info;
525 sender_info.ntp_seconds = kNtpHigh; 470 sender_info.ntp_seconds = kNtpHigh;
526 sender_info.ntp_fraction = kNtpLow; 471 sender_info.ntp_fraction = kNtpLow;
527 sender_info.rtp_timestamp = kRtpTimestamp; 472 sender_info.rtp_timestamp = kRtpTimestamp;
528 sender_info.send_packet_count = kSendPacketCount; 473 sender_info.send_packet_count = kSendPacketCount;
529 sender_info.send_octet_count = kSendOctetCount; 474 sender_info.send_octet_count = kSendOctetCount;
530 475
531 // Sender report. 476 // Sender report.
532 TestRtcpPacketBuilder p; 477 TestRtcpPacketBuilder p;
533 p.AddSr(kSendingSsrc, 0); 478 p.AddSr(kSendingSsrc, 0);
534 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
535 479
536 rtcp_sender_->SendRtcpFromRtpSender(sender_info); 480 ExpectPacketEQ(p.GetPacket().Pass(),
537 481 rtcp_builder_->BuildRtcpFromSender(sender_info));
538 EXPECT_EQ(1, test_transport_.packet_count());
539 } 482 }
540 483
541 } // namespace cast 484 } // namespace cast
542 } // namespace media 485 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698