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

Side by Side Diff: media/cast/net/cast_transport_impl_unittest.cc

Issue 1878883003: Refactor: simplify interface of SenderRtcpSession and CastTransport. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 7 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/cast_transport_impl.cc ('k') | media/cast/net/mock_cast_transport.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 "media/cast/net/cast_transport_impl.h" 5 #include "media/cast/net/cast_transport_impl.h"
6 6
7 #include <gtest/gtest.h> 7 #include <gtest/gtest.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 12 matching lines...) Expand all
23 23
24 namespace media { 24 namespace media {
25 namespace cast { 25 namespace cast {
26 26
27 namespace { 27 namespace {
28 28
29 const int64_t kStartMillisecond = INT64_C(12345678900000); 29 const int64_t kStartMillisecond = INT64_C(12345678900000);
30 const uint32_t kVideoSsrc = 1; 30 const uint32_t kVideoSsrc = 1;
31 const uint32_t kAudioSsrc = 2; 31 const uint32_t kAudioSsrc = 2;
32 32
33 class StubRtcpObserver : public RtcpObserver {
34 public:
35 StubRtcpObserver() {}
36
37 void OnReceivedCastMessage(const RtcpCastMessage& cast_message) final {}
38 void OnReceivedRtt(base::TimeDelta round_trip_time) final {}
39 void OnReceivedPli() final {}
40
41 DISALLOW_COPY_AND_ASSIGN(StubRtcpObserver);
42 };
43
33 } // namespace 44 } // namespace
34 45
35 class FakePacketSender : public PacketTransport { 46 class FakePacketSender : public PacketTransport {
36 public: 47 public:
37 FakePacketSender() : paused_(false), packets_sent_(0), bytes_sent_(0) {} 48 FakePacketSender() : paused_(false), packets_sent_(0), bytes_sent_(0) {}
38 49
39 bool SendPacket(PacketRef packet, const base::Closure& cb) final { 50 bool SendPacket(PacketRef packet, const base::Closure& cb) final {
40 if (paused_) { 51 if (paused_) {
41 stored_packet_ = packet; 52 stored_packet_ = packet;
42 callback_ = cb; 53 callback_ = cb;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 100
90 void InitWithoutLogging(); 101 void InitWithoutLogging();
91 void InitWithOptions(); 102 void InitWithOptions();
92 void InitWithLogging(); 103 void InitWithLogging();
93 104
94 void InitializeVideo() { 105 void InitializeVideo() {
95 CastTransportRtpConfig rtp_config; 106 CastTransportRtpConfig rtp_config;
96 rtp_config.ssrc = kVideoSsrc; 107 rtp_config.ssrc = kVideoSsrc;
97 rtp_config.feedback_ssrc = 2; 108 rtp_config.feedback_ssrc = 2;
98 rtp_config.rtp_payload_type = 3; 109 rtp_config.rtp_payload_type = 3;
99 transport_sender_->InitializeVideo(rtp_config, RtcpCastMessageCallback(), 110 transport_sender_->InitializeVideo(
100 RtcpRttCallback(), RtcpPliCallback()); 111 rtp_config, base::WrapUnique(new StubRtcpObserver()));
101 } 112 }
102 113
103 void InitializeAudio() { 114 void InitializeAudio() {
104 CastTransportRtpConfig rtp_config; 115 CastTransportRtpConfig rtp_config;
105 rtp_config.ssrc = kAudioSsrc; 116 rtp_config.ssrc = kAudioSsrc;
106 rtp_config.feedback_ssrc = 3; 117 rtp_config.feedback_ssrc = 3;
107 rtp_config.rtp_payload_type = 4; 118 rtp_config.rtp_payload_type = 4;
108 transport_sender_->InitializeAudio(rtp_config, RtcpCastMessageCallback(), 119 transport_sender_->InitializeAudio(
109 RtcpRttCallback(), RtcpPliCallback()); 120 rtp_config, base::WrapUnique(new StubRtcpObserver()));
110 } 121 }
111 122
112 base::SimpleTestTickClock testing_clock_; 123 base::SimpleTestTickClock testing_clock_;
113 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; 124 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_;
114 std::unique_ptr<CastTransportImpl> transport_sender_; 125 std::unique_ptr<CastTransportImpl> transport_sender_;
115 FakePacketSender* transport_; // Owned by CastTransport. 126 FakePacketSender* transport_; // Owned by CastTransport.
116 int num_times_logging_callback_called_; 127 int num_times_logging_callback_called_;
117 }; 128 };
118 129
119 namespace { 130 namespace {
120 131
121 class TransportClient : public CastTransport::Client { 132 class TransportClient : public CastTransport::Client {
122 public: 133 public:
123 explicit TransportClient( 134 explicit TransportClient(
124 CastTransportImplTest* cast_transport_sender_impl_test) 135 CastTransportImplTest* cast_transport_sender_impl_test)
125 : cast_transport_sender_impl_test_(cast_transport_sender_impl_test) {} 136 : cast_transport_sender_impl_test_(cast_transport_sender_impl_test) {}
126 137
127 void OnStatusChanged(CastTransportStatus status) final{}; 138 void OnStatusChanged(CastTransportStatus status) final{};
128 void OnLoggingEventsReceived( 139 void OnLoggingEventsReceived(
129 std::unique_ptr<std::vector<FrameEvent>> frame_events, 140 std::unique_ptr<std::vector<FrameEvent>> frame_events,
130 std::unique_ptr<std::vector<PacketEvent>> packet_events) final { 141 std::unique_ptr<std::vector<PacketEvent>> packet_events) final {
131 CHECK(cast_transport_sender_impl_test_); 142 CHECK(cast_transport_sender_impl_test_);
132 cast_transport_sender_impl_test_->ReceivedLoggingEvents(); 143 cast_transport_sender_impl_test_->ReceivedLoggingEvents();
133 }; 144 };
134 void ProcessRtpPacket(std::unique_ptr<Packet> packet) final{}; 145 void ProcessRtpPacket(std::unique_ptr<Packet> packet) final {}
135 146
136 private: 147 private:
137 CastTransportImplTest* const cast_transport_sender_impl_test_; 148 CastTransportImplTest* const cast_transport_sender_impl_test_;
138 149
139 DISALLOW_COPY_AND_ASSIGN(TransportClient); 150 DISALLOW_COPY_AND_ASSIGN(TransportClient);
140 }; 151 };
141 152
142 } // namespace 153 } // namespace
143 154
144 void CastTransportImplTest::InitWithoutLogging() { 155 void CastTransportImplTest::InitWithoutLogging() {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 transport_sender_->ResendPackets(kVideoSsrc, missing_packets, true, 228 transport_sender_->ResendPackets(kVideoSsrc, missing_packets, true,
218 dedup_info); 229 dedup_info);
219 230
220 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); 231 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10));
221 EXPECT_EQ(2, num_times_logging_callback_called_); 232 EXPECT_EQ(2, num_times_logging_callback_called_);
222 233
223 RtcpCastMessage cast_message; 234 RtcpCastMessage cast_message;
224 cast_message.remote_ssrc = kVideoSsrc; 235 cast_message.remote_ssrc = kVideoSsrc;
225 cast_message.ack_frame_id = FrameId::first() + 1; 236 cast_message.ack_frame_id = FrameId::first() + 1;
226 cast_message.missing_frames_and_packets[fake_frame.frame_id].insert(3); 237 cast_message.missing_frames_and_packets[fake_frame.frame_id].insert(3);
227 transport_sender_->OnReceivedCastMessage( 238 transport_sender_->OnReceivedCastMessage(kVideoSsrc, cast_message);
228 kVideoSsrc, RtcpCastMessageCallback(), cast_message);
229 transport_->SetPaused(false); 239 transport_->SetPaused(false);
230 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); 240 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10));
231 EXPECT_EQ(3, num_times_logging_callback_called_); 241 EXPECT_EQ(3, num_times_logging_callback_called_);
232 242
233 // Resend one packet in the socket when unpaused. 243 // Resend one packet in the socket when unpaused.
234 // Resend one more packet from NACK. 244 // Resend one more packet from NACK.
235 EXPECT_EQ(6, transport_->packets_sent()); 245 EXPECT_EQ(6, transport_->packets_sent());
236 } 246 }
237 247
238 TEST_F(CastTransportImplTest, CancelRetransmits) { 248 TEST_F(CastTransportImplTest, CancelRetransmits) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 fake_audio.frame_id = FrameId::first() + 2; 349 fake_audio.frame_id = FrameId::first() + 2;
340 fake_audio.reference_time = testing_clock_.NowTicks(); 350 fake_audio.reference_time = testing_clock_.NowTicks();
341 transport_sender_->InsertFrame(kAudioSsrc, fake_audio); 351 transport_sender_->InsertFrame(kAudioSsrc, fake_audio);
342 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); 352 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2));
343 EXPECT_EQ(2, transport_->packets_sent()); 353 EXPECT_EQ(2, transport_->packets_sent());
344 354
345 // Ack the first audio frame. 355 // Ack the first audio frame.
346 RtcpCastMessage cast_message; 356 RtcpCastMessage cast_message;
347 cast_message.remote_ssrc = kAudioSsrc; 357 cast_message.remote_ssrc = kAudioSsrc;
348 cast_message.ack_frame_id = FrameId::first() + 1; 358 cast_message.ack_frame_id = FrameId::first() + 1;
349 transport_sender_->OnReceivedCastMessage( 359 transport_sender_->OnReceivedCastMessage(kAudioSsrc, cast_message);
350 kAudioSsrc, RtcpCastMessageCallback(), cast_message);
351 task_runner_->RunTasks(); 360 task_runner_->RunTasks();
352 EXPECT_EQ(2, transport_->packets_sent()); 361 EXPECT_EQ(2, transport_->packets_sent());
353 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. 362 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last.
354 363
355 // Send a fake video frame that will be decomposed into 4 packets. 364 // Send a fake video frame that will be decomposed into 4 packets.
356 EncodedFrame fake_video; 365 EncodedFrame fake_video;
357 fake_video.frame_id = FrameId::first() + 1; 366 fake_video.frame_id = FrameId::first() + 1;
358 fake_video.referenced_frame_id = FrameId::first() + 1; 367 fake_video.referenced_frame_id = FrameId::first() + 1;
359 fake_video.dependency = EncodedFrame::KEY; 368 fake_video.dependency = EncodedFrame::KEY;
360 fake_video.data.resize(5000, ' '); 369 fake_video.data.resize(5000, ' ');
361 transport_sender_->InsertFrame(kVideoSsrc, fake_video); 370 transport_sender_->InsertFrame(kVideoSsrc, fake_video);
362 task_runner_->RunTasks(); 371 task_runner_->RunTasks();
363 EXPECT_EQ(6, transport_->packets_sent()); 372 EXPECT_EQ(6, transport_->packets_sent());
364 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. 373 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last.
365 374
366 // Retransmission is reject because audio is not acked yet. 375 // Retransmission is reject because audio is not acked yet.
367 cast_message.remote_ssrc = kVideoSsrc; 376 cast_message.remote_ssrc = kVideoSsrc;
368 cast_message.ack_frame_id = FrameId::first(); 377 cast_message.ack_frame_id = FrameId::first();
369 cast_message.missing_frames_and_packets[fake_video.frame_id].insert(3); 378 cast_message.missing_frames_and_packets[fake_video.frame_id].insert(3);
370 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); 379 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10));
371 transport_sender_->OnReceivedCastMessage( 380 transport_sender_->OnReceivedCastMessage(kVideoSsrc, cast_message);
372 kVideoSsrc, RtcpCastMessageCallback(), cast_message);
373 task_runner_->RunTasks(); 381 task_runner_->RunTasks();
374 EXPECT_EQ(6, transport_->packets_sent()); 382 EXPECT_EQ(6, transport_->packets_sent());
375 EXPECT_EQ(1, num_times_logging_callback_called_); 383 EXPECT_EQ(1, num_times_logging_callback_called_);
376 384
377 // Ack the second audio frame. 385 // Ack the second audio frame.
378 cast_message.remote_ssrc = kAudioSsrc; 386 cast_message.remote_ssrc = kAudioSsrc;
379 cast_message.ack_frame_id = FrameId::first() + 2; 387 cast_message.ack_frame_id = FrameId::first() + 2;
380 cast_message.missing_frames_and_packets.clear(); 388 cast_message.missing_frames_and_packets.clear();
381 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); 389 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2));
382 transport_sender_->OnReceivedCastMessage( 390 transport_sender_->OnReceivedCastMessage(kAudioSsrc, cast_message);
383 kAudioSsrc, RtcpCastMessageCallback(), cast_message);
384 task_runner_->RunTasks(); 391 task_runner_->RunTasks();
385 EXPECT_EQ(6, transport_->packets_sent()); 392 EXPECT_EQ(6, transport_->packets_sent());
386 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 6 ms since last. 393 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 6 ms since last.
387 394
388 // Retransmission of video packet now accepted. 395 // Retransmission of video packet now accepted.
389 cast_message.remote_ssrc = kVideoSsrc; 396 cast_message.remote_ssrc = kVideoSsrc;
390 cast_message.ack_frame_id = FrameId::first() + 1; 397 cast_message.ack_frame_id = FrameId::first() + 1;
391 cast_message.missing_frames_and_packets[fake_video.frame_id].insert(3); 398 cast_message.missing_frames_and_packets[fake_video.frame_id].insert(3);
392 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); 399 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2));
393 transport_sender_->OnReceivedCastMessage( 400 transport_sender_->OnReceivedCastMessage(kVideoSsrc, cast_message);
394 kVideoSsrc, RtcpCastMessageCallback(), cast_message);
395 task_runner_->RunTasks(); 401 task_runner_->RunTasks();
396 EXPECT_EQ(7, transport_->packets_sent()); 402 EXPECT_EQ(7, transport_->packets_sent());
397 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 8 ms since last. 403 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 8 ms since last.
398 404
399 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); 405 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2));
400 EXPECT_EQ(2, num_times_logging_callback_called_); 406 EXPECT_EQ(2, num_times_logging_callback_called_);
401 } 407 }
402 408
403 } // namespace cast 409 } // namespace cast
404 } // namespace media 410 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/net/cast_transport_impl.cc ('k') | media/cast/net/mock_cast_transport.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698