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 MockTransportFeedbackAdapterObserver : | |
42 public webrtc::TransportFeedbackAdapterObserver { | |
43 public: | |
44 MOCK_METHOD2(OnPacketAdded, void(uint32_t ssrc, uint16_t seq_num)); | |
45 MOCK_METHOD1(OnNewTransportFeedbackVector, | |
46 void(const std::vector<PacketFeedback>& packet_feedback_vector)); | |
47 }; | |
48 | |
41 class TransportFeedbackAdapterTest : public ::testing::Test { | 49 class TransportFeedbackAdapterTest : public ::testing::Test { |
42 public: | 50 public: |
43 TransportFeedbackAdapterTest() : clock_(0) {} | 51 TransportFeedbackAdapterTest() : clock_(0) {} |
44 | 52 |
45 virtual ~TransportFeedbackAdapterTest() {} | 53 virtual ~TransportFeedbackAdapterTest() {} |
46 | 54 |
47 virtual void SetUp() { | 55 virtual void SetUp() { |
48 adapter_.reset(new TransportFeedbackAdapter(&clock_)); | 56 adapter_.reset(new TransportFeedbackAdapter(&clock_)); |
49 } | 57 } |
50 | 58 |
51 virtual void TearDown() { adapter_.reset(); } | 59 virtual void TearDown() { adapter_.reset(); } |
52 | 60 |
53 protected: | 61 protected: |
54 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} | 62 void OnReceivedEstimatedBitrate(uint32_t bitrate) {} |
55 | 63 |
56 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, | 64 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, |
57 int64_t rtt, | 65 int64_t rtt, |
58 int64_t now_ms) {} | 66 int64_t now_ms) {} |
59 | 67 |
60 void OnSentPacket(const PacketFeedback& packet_feedback) { | 68 void OnSentPacket(const PacketFeedback& packet_feedback) { |
61 adapter_->AddPacket(packet_feedback.sequence_number, | 69 adapter_->AddPacket(kSsrc, packet_feedback.sequence_number, |
62 packet_feedback.payload_size, | 70 packet_feedback.payload_size, |
63 packet_feedback.pacing_info); | 71 packet_feedback.pacing_info); |
64 adapter_->OnSentPacket(packet_feedback.sequence_number, | 72 adapter_->OnSentPacket(packet_feedback.sequence_number, |
65 packet_feedback.send_time_ms); | 73 packet_feedback.send_time_ms); |
66 } | 74 } |
67 | 75 |
76 static constexpr uint32_t kSsrc = 8492; | |
77 | |
68 SimulatedClock clock_; | 78 SimulatedClock clock_; |
69 std::unique_ptr<TransportFeedbackAdapter> adapter_; | 79 std::unique_ptr<TransportFeedbackAdapter> adapter_; |
70 }; | 80 }; |
71 | 81 |
82 TEST_F(TransportFeedbackAdapterTest, ObserverSanity) { | |
83 MockTransportFeedbackAdapterObserver mock; | |
84 adapter_->RegisterTransportFeedbackAdapterObserver(&mock); | |
85 | |
86 std::vector<PacketFeedback> packets = { | |
minyue-webrtc
2017/03/22 07:51:39
const
elad.alon_webrtc.org
2017/03/22 09:36:30
Done.
| |
87 PacketFeedback(100, 200, 0, 1000, kPacingInfo0), | |
88 PacketFeedback(110, 210, 1, 2000, kPacingInfo0), | |
89 PacketFeedback(120, 220, 2, 3000, kPacingInfo0) | |
90 }; | |
91 | |
92 rtcp::TransportFeedback feedback; | |
93 feedback.SetBase(packets[0].sequence_number, | |
94 packets[0].arrival_time_ms * 1000); | |
95 | |
96 for (const PacketFeedback& packet : packets) { | |
97 EXPECT_CALL(mock, OnPacketAdded(kSsrc, packet.sequence_number)); | |
98 OnSentPacket(packet); | |
99 EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number, | |
100 packet.arrival_time_ms * 1000)); | |
101 } | |
102 | |
103 EXPECT_CALL(mock, OnNewTransportFeedbackVector(_)); | |
104 adapter_->OnTransportFeedback(feedback); | |
105 | |
106 adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); | |
107 } | |
108 | |
109 TEST_F(TransportFeedbackAdapterTest, ObserverDoubleRegistrationDeathTest) { | |
110 MockTransportFeedbackAdapterObserver mock; | |
111 adapter_->RegisterTransportFeedbackAdapterObserver(&mock); | |
112 EXPECT_DEATH(adapter_->RegisterTransportFeedbackAdapterObserver(&mock), ""); | |
113 adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); | |
114 } | |
115 | |
116 TEST_F(TransportFeedbackAdapterTest, ObserverMissingDeRegistrationDeathTest) { | |
117 MockTransportFeedbackAdapterObserver mock; | |
118 adapter_->RegisterTransportFeedbackAdapterObserver(&mock); | |
119 EXPECT_DEATH(adapter_.reset(), ""); | |
120 adapter_->DeRegisterTransportFeedbackAdapterObserver(&mock); | |
121 } | |
122 | |
72 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { | 123 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
73 std::vector<PacketFeedback> packets; | 124 std::vector<PacketFeedback> packets; |
74 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); | 125 packets.push_back(PacketFeedback(100, 200, 0, 1500, kPacingInfo0)); |
75 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); | 126 packets.push_back(PacketFeedback(110, 210, 1, 1500, kPacingInfo0)); |
76 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); | 127 packets.push_back(PacketFeedback(120, 220, 2, 1500, kPacingInfo0)); |
77 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); | 128 packets.push_back(PacketFeedback(130, 230, 3, 1500, kPacingInfo1)); |
78 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); | 129 packets.push_back(PacketFeedback(140, 240, 4, 1500, kPacingInfo1)); |
79 | 130 |
80 for (const PacketFeedback& packet : packets) | 131 for (const PacketFeedback& packet : packets) |
81 OnSentPacket(packet); | 132 OnSentPacket(packet); |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
317 adapter_->OnTransportFeedback(*feedback.get()); | 368 adapter_->OnTransportFeedback(*feedback.get()); |
318 { | 369 { |
319 std::vector<PacketFeedback> expected_packets; | 370 std::vector<PacketFeedback> expected_packets; |
320 expected_packets.push_back(packet_feedback); | 371 expected_packets.push_back(packet_feedback); |
321 ComparePacketFeedbackVectors(expected_packets, | 372 ComparePacketFeedbackVectors(expected_packets, |
322 adapter_->GetTransportFeedbackVector()); | 373 adapter_->GetTransportFeedbackVector()); |
323 } | 374 } |
324 } | 375 } |
325 } // namespace test | 376 } // namespace test |
326 } // namespace webrtc | 377 } // namespace webrtc |
OLD | NEW |