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