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 MockPacketFeedbackObserver : public webrtc::PacketFeedbackObserver { |
| 42 public: |
| 43 MOCK_METHOD2(OnPacketAdded, void(uint32_t ssrc, uint16_t seq_num)); |
| 44 MOCK_METHOD1(OnPacketFeedbackVector, |
| 45 void(const std::vector<PacketFeedback>& packet_feedback_vector)); |
| 46 }; |
| 47 |
41 class TransportFeedbackAdapterTest : public ::testing::Test { | 48 class TransportFeedbackAdapterTest : public ::testing::Test { |
42 public: | 49 public: |
43 TransportFeedbackAdapterTest() : clock_(0) {} | 50 TransportFeedbackAdapterTest() : clock_(0) {} |
44 | 51 |
45 virtual ~TransportFeedbackAdapterTest() {} | 52 virtual ~TransportFeedbackAdapterTest() {} |
46 | 53 |
47 virtual void SetUp() { | 54 virtual void SetUp() { |
48 adapter_.reset(new TransportFeedbackAdapter(&clock_)); | 55 adapter_.reset(new TransportFeedbackAdapter(&clock_)); |
49 } | 56 } |
50 | 57 |
51 virtual void TearDown() { adapter_.reset(); } | 58 virtual void TearDown() { adapter_.reset(); } |
52 | 59 |
53 protected: | 60 protected: |
54 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} | 61 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} |
55 | 62 |
56 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, | 63 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, |
57 int64_t rtt, | 64 int64_t rtt, |
58 int64_t now_ms) {} | 65 int64_t now_ms) {} |
59 | 66 |
60 void OnSentPacket(const PacketFeedback& packet_feedback) { | 67 void OnSentPacket(const PacketFeedback& packet_feedback) { |
61 adapter_->AddPacket(packet_feedback.sequence_number, | 68 adapter_->AddPacket(kSsrc, packet_feedback.sequence_number, |
62 packet_feedback.payload_size, | 69 packet_feedback.payload_size, |
63 packet_feedback.pacing_info); | 70 packet_feedback.pacing_info); |
64 adapter_->OnSentPacket(packet_feedback.sequence_number, | 71 adapter_->OnSentPacket(packet_feedback.sequence_number, |
65 packet_feedback.send_time_ms); | 72 packet_feedback.send_time_ms); |
66 } | 73 } |
67 | 74 |
| 75 static constexpr uint32_t kSsrc = 8492; |
| 76 |
68 SimulatedClock clock_; | 77 SimulatedClock clock_; |
69 std::unique_ptr<TransportFeedbackAdapter> adapter_; | 78 std::unique_ptr<TransportFeedbackAdapter> adapter_; |
70 }; | 79 }; |
71 | 80 |
| 81 TEST_F(TransportFeedbackAdapterTest, ObserverSanity) { |
| 82 MockPacketFeedbackObserver mock; |
| 83 adapter_->RegisterPacketFeedbackObserver(&mock); |
| 84 |
| 85 const std::vector<PacketFeedback> packets = { |
| 86 PacketFeedback(100, 200, 0, 1000, kPacingInfo0), |
| 87 PacketFeedback(110, 210, 1, 2000, kPacingInfo0), |
| 88 PacketFeedback(120, 220, 2, 3000, kPacingInfo0) |
| 89 }; |
| 90 |
| 91 rtcp::TransportFeedback feedback; |
| 92 feedback.SetBase(packets[0].sequence_number, |
| 93 packets[0].arrival_time_ms * 1000); |
| 94 |
| 95 for (const PacketFeedback& packet : packets) { |
| 96 EXPECT_CALL(mock, OnPacketAdded(kSsrc, packet.sequence_number)).Times(1); |
| 97 OnSentPacket(packet); |
| 98 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
| 99 packet.arrival_time_ms * 1000)); |
| 100 } |
| 101 |
| 102 EXPECT_CALL(mock, OnPacketFeedbackVector(_)).Times(1); |
| 103 adapter_->OnTransportFeedback(feedback); |
| 104 |
| 105 adapter_->DeRegisterPacketFeedbackObserver(&mock); |
| 106 |
| 107 // After deregistration, the observer no longers gets indications. |
| 108 EXPECT_CALL(mock, OnPacketAdded(_, _)).Times(0); |
| 109 const PacketFeedback new_packet(130, 230, 3, 4000, kPacingInfo0); |
| 110 OnSentPacket(new_packet); |
| 111 |
| 112 rtcp::TransportFeedback second_feedback; |
| 113 second_feedback.SetBase(new_packet.sequence_number, |
| 114 new_packet.arrival_time_ms * 1000); |
| 115 EXPECT_TRUE(feedback.AddReceivedPacket(new_packet.sequence_number, |
| 116 new_packet.arrival_time_ms * 1000)); |
| 117 EXPECT_CALL(mock, OnPacketFeedbackVector(_)).Times(0); |
| 118 adapter_->OnTransportFeedback(second_feedback); |
| 119 } |
| 120 |
| 121 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
| 122 TEST_F(TransportFeedbackAdapterTest, ObserverDoubleRegistrationDeathTest) { |
| 123 MockPacketFeedbackObserver mock; |
| 124 adapter_->RegisterPacketFeedbackObserver(&mock); |
| 125 EXPECT_DEATH(adapter_->RegisterPacketFeedbackObserver(&mock), ""); |
| 126 adapter_->DeRegisterPacketFeedbackObserver(&mock); |
| 127 } |
| 128 |
| 129 TEST_F(TransportFeedbackAdapterTest, ObserverMissingDeRegistrationDeathTest) { |
| 130 MockPacketFeedbackObserver mock; |
| 131 adapter_->RegisterPacketFeedbackObserver(&mock); |
| 132 EXPECT_DEATH(adapter_.reset(), ""); |
| 133 adapter_->DeRegisterPacketFeedbackObserver(&mock); |
| 134 } |
| 135 #endif |
| 136 |
72 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { | 137 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
73 std::vector<PacketFeedback> packets; | 138 std::vector<PacketFeedback> packets; |
74 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); | 139 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); |
75 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); | 140 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); |
76 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); | 141 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); |
77 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); | 142 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); |
78 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); | 143 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); |
79 | 144 |
80 for (const PacketFeedback& packet : packets) | 145 for (const PacketFeedback& packet : packets) |
81 OnSentPacket(packet); | 146 OnSentPacket(packet); |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 adapter_->OnTransportFeedback(*feedback.get()); | 382 adapter_->OnTransportFeedback(*feedback.get()); |
318 { | 383 { |
319 std::vector<PacketFeedback> expected_packets; | 384 std::vector<PacketFeedback> expected_packets; |
320 expected_packets.push_back(packet_feedback); | 385 expected_packets.push_back(packet_feedback); |
321 ComparePacketFeedbackVectors(expected_packets, | 386 ComparePacketFeedbackVectors(expected_packets, |
322 adapter_->GetTransportFeedbackVector()); | 387 adapter_->GetTransportFeedbackVector()); |
323 } | 388 } |
324 } | 389 } |
325 } // namespace test | 390 } // namespace test |
326 } // namespace webrtc | 391 } // namespace webrtc |
OLD | NEW |