| 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 |