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..4ae6f490a1e11f1eeab54b775ce74043d75d280d 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,62 @@ 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); |
+ |
+ 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)); |
+ OnSentPacket(packet); |
+ EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, |
+ packet.arrival_time_ms * 1000)); |
+ } |
+ |
+ EXPECT_CALL(mock, OnNewTransportFeedbackVector(_)); |
+ adapter_->OnTransportFeedback(feedback); |
+ |
+ adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); |
minyue-webrtc
2017/03/22 07:51:39
I hope you do another
adapter_->OnTransportFeedba
elad.alon_webrtc.org
2017/03/22 09:36:31
Done.
|
+} |
+ |
+#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
+TEST_F(TransportFeedbackAdapterTest, ObserverDoubleRegistrationDeathTest) { |
+ 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)); |