Chromium Code Reviews| Index: webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
| diff --git a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
| index 22e8b59b95480a202bdb676f1fb8fe836d367943..26cbe8f6e9f410b4111b8e67725805b388f62c4b 100644 |
| --- a/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
| +++ b/webrtc/modules/congestion_controller/transport_feedback_adapter_unittest.cc |
| @@ -38,6 +38,14 @@ const PacedPacketInfo kPacingInfo4(4, 22, 10000); |
| namespace test { |
| +class MockTransportFeedbackAdapterObserver : |
| + public webrtc::TransportFeedbackAdapterObserver { |
| + public: |
| + MOCK_METHOD2(OnPacketAdded, void(uint32_t ssrc, uint16_t seq_num)); |
| + MOCK_METHOD1(OnNewTransportFeedbackVector, |
| + void(const std::vector<PacketFeedback>& packet_feedback_vector)); |
| +}; |
| + |
| class TransportFeedbackAdapterTest : public ::testing::Test { |
| public: |
| TransportFeedbackAdapterTest() : clock_(0) {} |
| @@ -58,17 +66,75 @@ class TransportFeedbackAdapterTest : public ::testing::Test { |
| int64_t now_ms) {} |
| void OnSentPacket(const PacketFeedback& packet_feedback) { |
| - adapter_->AddPacket(packet_feedback.sequence_number, |
| + adapter_->AddPacket(kSsrc, packet_feedback.sequence_number, |
| packet_feedback.payload_size, |
| packet_feedback.pacing_info); |
| adapter_->OnSentPacket(packet_feedback.sequence_number, |
| packet_feedback.send_time_ms); |
| } |
| + static constexpr uint32_t kSsrc = 8492; |
| + |
| SimulatedClock clock_; |
| std::unique_ptr<TransportFeedbackAdapter> adapter_; |
| }; |
| +TEST_F(TransportFeedbackAdapterTest, ObserverSanity) { |
| + MockTransportFeedbackAdapterObserver mock; |
| + adapter_->RegisterTransportFeedbackAdapterObserver(&mock); |
| + |
| + const std::vector<PacketFeedback> packets = { |
| + PacketFeedback(100, 200, 0, 1000, kPacingInfo0), |
| + PacketFeedback(110, 210, 1, 2000, kPacingInfo0), |
| + PacketFeedback(120, 220, 2, 3000, kPacingInfo0) |
| + }; |
| + |
| + rtcp::TransportFeedback feedback; |
| + feedback.SetBase(packets[0].sequence_number, |
| + packets[0].arrival_time_ms * 1000); |
| + |
| + for (const PacketFeedback& packet : packets) { |
| + EXPECT_CALL(mock, OnPacketAdded(kSsrc, packet.sequence_number)).Times(1); |
| + OnSentPacket(packet); |
| + EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
| + packet.arrival_time_ms * 1000)); |
| + } |
| + |
| + EXPECT_CALL(mock, OnNewTransportFeedbackVector(_)).Times(1); |
| + adapter_->OnTransportFeedback(feedback); |
| + |
| + adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); |
| + |
| + // After deregistration, the observer no longers gets indications. |
| + EXPECT_CALL(mock, OnPacketAdded(_, _)).Times(0); |
| + const PacketFeedback new_packet(130, 230, 3, 4000, kPacingInfo0); |
| + OnSentPacket(new_packet); |
| + |
| + rtcp::TransportFeedback second_feedback; |
| + second_feedback.SetBase(new_packet.sequence_number, |
| + new_packet.arrival_time_ms * 1000); |
| + EXPECT_TRUE(feedback.AddReceivedPacket(new_packet.sequence_number, |
| + new_packet.arrival_time_ms * 1000)); |
| + EXPECT_CALL(mock, OnNewTransportFeedbackVector(_)).Times(0); |
| + adapter_->OnTransportFeedback(second_feedback); |
| +} |
| + |
| +#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
| +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
|
| + MockTransportFeedbackAdapterObserver mock; |
| + adapter_->RegisterTransportFeedbackAdapterObserver(&mock); |
| + EXPECT_DEATH(adapter_->RegisterTransportFeedbackAdapterObserver(&mock), ""); |
| + adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); |
| +} |
| + |
| +TEST_F(TransportFeedbackAdapterTest, ObserverMissingDeRegistrationDeathTest) { |
| + MockTransportFeedbackAdapterObserver mock; |
| + adapter_->RegisterTransportFeedbackAdapterObserver(&mock); |
| + EXPECT_DEATH(adapter_.reset(), ""); |
| + adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); |
| +} |
| +#endif |
| + |
| TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
| std::vector<PacketFeedback> packets; |
| packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); |