OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 20 matching lines...) Expand all Loading... | |
31 namespace { | 31 namespace { |
32 const PacedPacketInfo kPacingInfo0(0, 5, 2000); | 32 const PacedPacketInfo kPacingInfo0(0, 5, 2000); |
33 const PacedPacketInfo kPacingInfo1(1, 8, 4000); | 33 const PacedPacketInfo kPacingInfo1(1, 8, 4000); |
34 const PacedPacketInfo kPacingInfo2(2, 14, 7000); | 34 const PacedPacketInfo kPacingInfo2(2, 14, 7000); |
35 const PacedPacketInfo kPacingInfo3(3, 20, 10000); | 35 const PacedPacketInfo kPacingInfo3(3, 20, 10000); |
36 const PacedPacketInfo kPacingInfo4(4, 22, 10000); | 36 const PacedPacketInfo kPacingInfo4(4, 22, 10000); |
37 } | 37 } |
38 | 38 |
39 namespace test { | 39 namespace test { |
40 | 40 |
41 class MockTransportFeedbackAdapterObserver : | |
42 public webrtc::TransportFeedbackAdapterObserver { | |
43 public: | |
44 MOCK_METHOD2(OnPacketAdded, void(uint32_t ssrc, uint16_t seq_num)); | |
45 MOCK_METHOD1(OnNewTransportFeedbackVector, | |
46 void(const std::vector<PacketFeedback>& packet_feedback_vector)); | |
47 }; | |
48 | |
41 class TransportFeedbackAdapterTest : public ::testing::Test { | 49 class TransportFeedbackAdapterTest : public ::testing::Test { |
42 public: | 50 public: |
43 TransportFeedbackAdapterTest() : clock_(0) {} | 51 TransportFeedbackAdapterTest() : clock_(0) {} |
44 | 52 |
45 virtual ~TransportFeedbackAdapterTest() {} | 53 virtual ~TransportFeedbackAdapterTest() {} |
46 | 54 |
47 virtual void SetUp() { | 55 virtual void SetUp() { |
48 adapter_.reset(new TransportFeedbackAdapter(&clock_)); | 56 adapter_.reset(new TransportFeedbackAdapter(&clock_)); |
49 } | 57 } |
50 | 58 |
51 virtual void TearDown() { adapter_.reset(); } | 59 virtual void TearDown() { adapter_.reset(); } |
52 | 60 |
53 protected: | 61 protected: |
54 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} | 62 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} |
55 | 63 |
56 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, | 64 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, |
57 int64_t rtt, | 65 int64_t rtt, |
58 int64_t now_ms) {} | 66 int64_t now_ms) {} |
59 | 67 |
60 void OnSentPacket(const PacketFeedback& packet_feedback) { | 68 void OnSentPacket(const PacketFeedback& packet_feedback) { |
61 adapter_->AddPacket(packet_feedback.sequence_number, | 69 adapter_->AddPacket(kSsrc, packet_feedback.sequence_number, |
62 packet_feedback.payload_size, | 70 packet_feedback.payload_size, |
63 packet_feedback.pacing_info); | 71 packet_feedback.pacing_info); |
64 adapter_->OnSentPacket(packet_feedback.sequence_number, | 72 adapter_->OnSentPacket(packet_feedback.sequence_number, |
65 packet_feedback.send_time_ms); | 73 packet_feedback.send_time_ms); |
66 } | 74 } |
67 | 75 |
76 static constexpr uint32_t kSsrc = 8492; | |
77 | |
68 SimulatedClock clock_; | 78 SimulatedClock clock_; |
69 std::unique_ptr<TransportFeedbackAdapter> adapter_; | 79 std::unique_ptr<TransportFeedbackAdapter> adapter_; |
70 }; | 80 }; |
71 | 81 |
82 TEST_F(TransportFeedbackAdapterTest, ObserverSanity) { | |
83 MockTransportFeedbackAdapterObserver mock; | |
84 adapter_->RegisterTransportFeedbackAdapterObserver(&mock); | |
85 | |
86 const std::vector<PacketFeedback> packets = { | |
87 PacketFeedback(100, 200, 0, 1000, kPacingInfo0), | |
88 PacketFeedback(110, 210, 1, 2000, kPacingInfo0), | |
89 PacketFeedback(120, 220, 2, 3000, kPacingInfo0) | |
90 }; | |
91 | |
92 rtcp::TransportFeedback feedback; | |
93 feedback.SetBase(packets[0].sequence_number, | |
94 packets[0].arrival_time_ms * 1000); | |
95 | |
96 for (const PacketFeedback& packet : packets) { | |
97 EXPECT_CALL(mock, OnPacketAdded(kSsrc, packet.sequence_number)).Times(1); | |
98 OnSentPacket(packet); | |
99 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, | |
100 packet.arrival_time_ms * 1000)); | |
101 } | |
102 | |
103 EXPECT_CALL(mock, OnNewTransportFeedbackVector(_)).Times(1); | |
104 adapter_->OnTransportFeedback(feedback); | |
105 | |
106 adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); | |
107 | |
108 // After deregistration, the observer no longers gets indications. | |
109 EXPECT_CALL(mock, OnPacketAdded(_, _)).Times(0); | |
110 const PacketFeedback new_packet(130, 230, 3, 4000, kPacingInfo0); | |
111 OnSentPacket(new_packet); | |
112 | |
113 rtcp::TransportFeedback second_feedback; | |
114 second_feedback.SetBase(new_packet.sequence_number, | |
115 new_packet.arrival_time_ms * 1000); | |
116 EXPECT_TRUE(feedback.AddReceivedPacket(new_packet.sequence_number, | |
117 new_packet.arrival_time_ms * 1000)); | |
118 EXPECT_CALL(mock, OnNewTransportFeedbackVector(_)).Times(0); | |
119 adapter_->OnTransportFeedback(second_feedback); | |
120 } | |
121 | |
122 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | |
123 TEST_F(TransportFeedbackAdapterTest, ObserverDoubleRegistrationDeathTest) { | |
stefan-webrtc
2017/03/22 12:03:01
Not sure about the value of these tests, but if yo
elad.alon_webrtc.org
2017/03/22 14:34:47
I've added them on the basis of reviewers' request
| |
124 MockTransportFeedbackAdapterObserver mock; | |
125 adapter_->RegisterTransportFeedbackAdapterObserver(&mock); | |
126 EXPECT_DEATH(adapter_->RegisterTransportFeedbackAdapterObserver(&mock), ""); | |
127 adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); | |
128 } | |
129 | |
130 TEST_F(TransportFeedbackAdapterTest, ObserverMissingDeRegistrationDeathTest) { | |
131 MockTransportFeedbackAdapterObserver mock; | |
132 adapter_->RegisterTransportFeedbackAdapterObserver(&mock); | |
133 EXPECT_DEATH(adapter_.reset(), ""); | |
134 adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); | |
135 } | |
136 #endif | |
137 | |
72 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { | 138 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
73 std::vector<PacketFeedback> packets; | 139 std::vector<PacketFeedback> packets; |
74 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); | 140 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); |
75 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); | 141 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); |
76 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); | 142 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); |
77 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); | 143 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); |
78 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); | 144 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); |
79 | 145 |
80 for (const PacketFeedback& packet : packets) | 146 for (const PacketFeedback& packet : packets) |
81 OnSentPacket(packet); | 147 OnSentPacket(packet); |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
317 adapter_->OnTransportFeedback(*feedback.get()); | 383 adapter_->OnTransportFeedback(*feedback.get()); |
318 { | 384 { |
319 std::vector<PacketFeedback> expected_packets; | 385 std::vector<PacketFeedback> expected_packets; |
320 expected_packets.push_back(packet_feedback); | 386 expected_packets.push_back(packet_feedback); |
321 ComparePacketFeedbackVectors(expected_packets, | 387 ComparePacketFeedbackVectors(expected_packets, |
322 adapter_->GetTransportFeedbackVector()); | 388 adapter_->GetTransportFeedbackVector()); |
323 } | 389 } |
324 } | 390 } |
325 } // namespace test | 391 } // namespace test |
326 } // namespace webrtc | 392 } // namespace webrtc |
OLD | NEW |