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

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

Powered by Google App Engine
This is Rietveld 408576698