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 12 matching lines...) Expand all Loading... | |
23 using ::testing::_; | 23 using ::testing::_; |
24 using ::testing::AnyNumber; | 24 using ::testing::AnyNumber; |
25 using ::testing::Field; | 25 using ::testing::Field; |
26 using ::testing::NiceMock; | 26 using ::testing::NiceMock; |
27 using ::testing::Return; | 27 using ::testing::Return; |
28 using ::testing::ReturnPointee; | 28 using ::testing::ReturnPointee; |
29 using ::testing::SaveArg; | 29 using ::testing::SaveArg; |
30 | 30 |
31 namespace webrtc { | 31 namespace webrtc { |
32 | 32 |
33 namespace { | |
34 constexpr int kProbeMinProbes = 5; | |
35 constexpr int kProbeMinBytes = 1000; | |
36 } // namespace | |
danilchap
2017/07/31 14:18:15
since you've added an unnamed namespace, may be hi
eladalon
2017/07/31 14:33:16
Done.
| |
37 | |
33 // TODO(eladalon): Restructure and/or replace the existing monolithic tests | 38 // TODO(eladalon): Restructure and/or replace the existing monolithic tests |
34 // (only some of the test are monolithic) according to the new | 39 // (only some of the test are monolithic) according to the new |
35 // guidelines - small tests for one thing at a time. | 40 // guidelines - small tests for one thing at a time. |
36 // (I'm not removing any tests during CL, so as to demonstrate no regressions.) | 41 // (I'm not removing any tests during CL, so as to demonstrate no regressions.) |
37 | 42 |
38 class MockRtpRtcpWithRembTracking : public MockRtpRtcp { | 43 class MockRtpRtcpWithRembTracking : public MockRtpRtcp { |
39 public: | 44 public: |
40 MockRtpRtcpWithRembTracking() { | 45 MockRtpRtcpWithRembTracking() { |
41 ON_CALL(*this, SetREMBStatus(_)).WillByDefault(SaveArg<0>(&remb_)); | 46 ON_CALL(*this, SetREMBStatus(_)).WillByDefault(SaveArg<0>(&remb_)); |
42 ON_CALL(*this, REMB()).WillByDefault(ReturnPointee(&remb_)); | 47 ON_CALL(*this, REMB()).WillByDefault(ReturnPointee(&remb_)); |
43 } | 48 } |
44 | 49 |
45 private: | 50 private: |
46 bool remb_ = false; | 51 bool remb_ = false; |
47 }; | 52 }; |
48 | 53 |
49 class PacketRouterTest : public ::testing::Test { | 54 TEST(PacketRouterTest, TimeToSendPacket) { |
50 public: | 55 PacketRouter packet_router; |
51 PacketRouterTest() : packet_router_(new PacketRouter()) {} | |
52 protected: | |
53 static constexpr int kProbeMinProbes = 5; | |
54 static constexpr int kProbeMinBytes = 1000; | |
55 const std::unique_ptr<PacketRouter> packet_router_; | |
56 }; | |
57 | |
58 TEST_F(PacketRouterTest, TimeToSendPacket) { | |
59 NiceMock<MockRtpRtcp> rtp_1; | 56 NiceMock<MockRtpRtcp> rtp_1; |
60 NiceMock<MockRtpRtcp> rtp_2; | 57 NiceMock<MockRtpRtcp> rtp_2; |
61 packet_router_->AddSendRtpModule(&rtp_1, false); | 58 |
62 packet_router_->AddSendRtpModule(&rtp_2, false); | 59 packet_router.AddSendRtpModule(&rtp_1, false); |
60 packet_router.AddSendRtpModule(&rtp_2, false); | |
63 | 61 |
64 const uint16_t kSsrc1 = 1234; | 62 const uint16_t kSsrc1 = 1234; |
65 uint16_t sequence_number = 17; | 63 uint16_t sequence_number = 17; |
66 uint64_t timestamp = 7890; | 64 uint64_t timestamp = 7890; |
67 bool retransmission = false; | 65 bool retransmission = false; |
68 | 66 |
69 // Send on the first module by letting rtp_1 be sending with correct ssrc. | 67 // Send on the first module by letting rtp_1 be sending with correct ssrc. |
70 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); | 68 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); |
71 EXPECT_CALL(rtp_1, SSRC()).Times(1).WillOnce(Return(kSsrc1)); | 69 EXPECT_CALL(rtp_1, SSRC()).Times(1).WillOnce(Return(kSsrc1)); |
72 EXPECT_CALL(rtp_1, TimeToSendPacket( | 70 EXPECT_CALL(rtp_1, TimeToSendPacket( |
73 kSsrc1, sequence_number, timestamp, retransmission, | 71 kSsrc1, sequence_number, timestamp, retransmission, |
74 Field(&PacedPacketInfo::probe_cluster_id, 1))) | 72 Field(&PacedPacketInfo::probe_cluster_id, 1))) |
75 .Times(1) | 73 .Times(1) |
76 .WillOnce(Return(true)); | 74 .WillOnce(Return(true)); |
77 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); | 75 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); |
78 EXPECT_TRUE(packet_router_->TimeToSendPacket( | 76 EXPECT_TRUE(packet_router.TimeToSendPacket( |
79 kSsrc1, sequence_number, timestamp, retransmission, | 77 kSsrc1, sequence_number, timestamp, retransmission, |
80 PacedPacketInfo(1, kProbeMinProbes, kProbeMinBytes))); | 78 PacedPacketInfo(1, kProbeMinProbes, kProbeMinBytes))); |
81 | 79 |
82 // Send on the second module by letting rtp_2 be sending, but not rtp_1. | 80 // Send on the second module by letting rtp_2 be sending, but not rtp_1. |
83 ++sequence_number; | 81 ++sequence_number; |
84 timestamp += 30; | 82 timestamp += 30; |
85 retransmission = true; | 83 retransmission = true; |
86 const uint16_t kSsrc2 = 4567; | 84 const uint16_t kSsrc2 = 4567; |
87 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(false)); | 85 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(false)); |
88 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); | 86 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); |
89 EXPECT_CALL(rtp_2, SSRC()).Times(1).WillOnce(Return(kSsrc2)); | 87 EXPECT_CALL(rtp_2, SSRC()).Times(1).WillOnce(Return(kSsrc2)); |
90 EXPECT_CALL(rtp_1, TimeToSendPacket(_, _, _, _, _)).Times(0); | 88 EXPECT_CALL(rtp_1, TimeToSendPacket(_, _, _, _, _)).Times(0); |
91 EXPECT_CALL(rtp_2, TimeToSendPacket( | 89 EXPECT_CALL(rtp_2, TimeToSendPacket( |
92 kSsrc2, sequence_number, timestamp, retransmission, | 90 kSsrc2, sequence_number, timestamp, retransmission, |
93 Field(&PacedPacketInfo::probe_cluster_id, 2))) | 91 Field(&PacedPacketInfo::probe_cluster_id, 2))) |
94 .Times(1) | 92 .Times(1) |
95 .WillOnce(Return(true)); | 93 .WillOnce(Return(true)); |
96 EXPECT_TRUE(packet_router_->TimeToSendPacket( | 94 EXPECT_TRUE(packet_router.TimeToSendPacket( |
97 kSsrc2, sequence_number, timestamp, retransmission, | 95 kSsrc2, sequence_number, timestamp, retransmission, |
98 PacedPacketInfo(2, kProbeMinProbes, kProbeMinBytes))); | 96 PacedPacketInfo(2, kProbeMinProbes, kProbeMinBytes))); |
99 | 97 |
100 // No module is sending, hence no packet should be sent. | 98 // No module is sending, hence no packet should be sent. |
101 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(false)); | 99 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(false)); |
102 EXPECT_CALL(rtp_1, TimeToSendPacket(_, _, _, _, _)).Times(0); | 100 EXPECT_CALL(rtp_1, TimeToSendPacket(_, _, _, _, _)).Times(0); |
103 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(false)); | 101 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(false)); |
104 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); | 102 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); |
105 EXPECT_TRUE(packet_router_->TimeToSendPacket( | 103 EXPECT_TRUE(packet_router.TimeToSendPacket( |
106 kSsrc1, sequence_number, timestamp, retransmission, | 104 kSsrc1, sequence_number, timestamp, retransmission, |
107 PacedPacketInfo(1, kProbeMinProbes, kProbeMinBytes))); | 105 PacedPacketInfo(1, kProbeMinProbes, kProbeMinBytes))); |
108 | 106 |
109 // Add a packet with incorrect ssrc and test it's dropped in the router. | 107 // Add a packet with incorrect ssrc and test it's dropped in the router. |
110 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); | 108 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); |
111 EXPECT_CALL(rtp_1, SSRC()).Times(1).WillOnce(Return(kSsrc1)); | 109 EXPECT_CALL(rtp_1, SSRC()).Times(1).WillOnce(Return(kSsrc1)); |
112 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); | 110 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); |
113 EXPECT_CALL(rtp_2, SSRC()).Times(1).WillOnce(Return(kSsrc2)); | 111 EXPECT_CALL(rtp_2, SSRC()).Times(1).WillOnce(Return(kSsrc2)); |
114 EXPECT_CALL(rtp_1, TimeToSendPacket(_, _, _, _, _)).Times(0); | 112 EXPECT_CALL(rtp_1, TimeToSendPacket(_, _, _, _, _)).Times(0); |
115 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); | 113 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); |
116 EXPECT_TRUE(packet_router_->TimeToSendPacket( | 114 EXPECT_TRUE(packet_router.TimeToSendPacket( |
117 kSsrc1 + kSsrc2, sequence_number, timestamp, retransmission, | 115 kSsrc1 + kSsrc2, sequence_number, timestamp, retransmission, |
118 PacedPacketInfo(1, kProbeMinProbes, kProbeMinBytes))); | 116 PacedPacketInfo(1, kProbeMinProbes, kProbeMinBytes))); |
119 | 117 |
120 packet_router_->RemoveSendRtpModule(&rtp_1); | 118 packet_router.RemoveSendRtpModule(&rtp_1); |
121 | 119 |
122 // rtp_1 has been removed, try sending a packet on that ssrc and make sure | 120 // rtp_1 has been removed, try sending a packet on that ssrc and make sure |
123 // it is dropped as expected by not expecting any calls to rtp_1. | 121 // it is dropped as expected by not expecting any calls to rtp_1. |
124 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); | 122 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); |
125 EXPECT_CALL(rtp_2, SSRC()).Times(1).WillOnce(Return(kSsrc2)); | 123 EXPECT_CALL(rtp_2, SSRC()).Times(1).WillOnce(Return(kSsrc2)); |
126 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); | 124 EXPECT_CALL(rtp_2, TimeToSendPacket(_, _, _, _, _)).Times(0); |
127 EXPECT_TRUE(packet_router_->TimeToSendPacket( | 125 EXPECT_TRUE(packet_router.TimeToSendPacket( |
128 kSsrc1, sequence_number, timestamp, retransmission, | 126 kSsrc1, sequence_number, timestamp, retransmission, |
129 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, | 127 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, |
130 kProbeMinBytes))); | 128 kProbeMinBytes))); |
131 | 129 |
132 packet_router_->RemoveSendRtpModule(&rtp_2); | 130 packet_router.RemoveSendRtpModule(&rtp_2); |
133 } | 131 } |
134 | 132 |
135 TEST_F(PacketRouterTest, TimeToSendPadding) { | 133 TEST(PacketRouterTest, TimeToSendPadding) { |
134 PacketRouter packet_router; | |
135 | |
136 const uint16_t kSsrc1 = 1234; | 136 const uint16_t kSsrc1 = 1234; |
137 const uint16_t kSsrc2 = 4567; | 137 const uint16_t kSsrc2 = 4567; |
138 | 138 |
139 NiceMock<MockRtpRtcp> rtp_1; | 139 NiceMock<MockRtpRtcp> rtp_1; |
140 EXPECT_CALL(rtp_1, RtxSendStatus()).WillOnce(Return(kRtxOff)); | 140 EXPECT_CALL(rtp_1, RtxSendStatus()).WillOnce(Return(kRtxOff)); |
141 EXPECT_CALL(rtp_1, SSRC()).WillRepeatedly(Return(kSsrc1)); | 141 EXPECT_CALL(rtp_1, SSRC()).WillRepeatedly(Return(kSsrc1)); |
142 NiceMock<MockRtpRtcp> rtp_2; | 142 NiceMock<MockRtpRtcp> rtp_2; |
143 // rtp_2 will be prioritized for padding. | 143 // rtp_2 will be prioritized for padding. |
144 EXPECT_CALL(rtp_2, RtxSendStatus()).WillOnce(Return(kRtxRedundantPayloads)); | 144 EXPECT_CALL(rtp_2, RtxSendStatus()).WillOnce(Return(kRtxRedundantPayloads)); |
145 EXPECT_CALL(rtp_2, SSRC()).WillRepeatedly(Return(kSsrc2)); | 145 EXPECT_CALL(rtp_2, SSRC()).WillRepeatedly(Return(kSsrc2)); |
146 packet_router_->AddSendRtpModule(&rtp_1, false); | 146 packet_router.AddSendRtpModule(&rtp_1, false); |
147 packet_router_->AddSendRtpModule(&rtp_2, false); | 147 packet_router.AddSendRtpModule(&rtp_2, false); |
148 | 148 |
149 // Default configuration, sending padding on all modules sending media, | 149 // Default configuration, sending padding on all modules sending media, |
150 // ordered by priority (based on rtx mode). | 150 // ordered by priority (based on rtx mode). |
151 const size_t requested_padding_bytes = 1000; | 151 const size_t requested_padding_bytes = 1000; |
152 const size_t sent_padding_bytes = 890; | 152 const size_t sent_padding_bytes = 890; |
153 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); | 153 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); |
154 EXPECT_CALL(rtp_2, HasBweExtensions()).Times(1).WillOnce(Return(true)); | 154 EXPECT_CALL(rtp_2, HasBweExtensions()).Times(1).WillOnce(Return(true)); |
155 EXPECT_CALL(rtp_2, | 155 EXPECT_CALL(rtp_2, |
156 TimeToSendPadding(requested_padding_bytes, | 156 TimeToSendPadding(requested_padding_bytes, |
157 Field(&PacedPacketInfo::probe_cluster_id, 111))) | 157 Field(&PacedPacketInfo::probe_cluster_id, 111))) |
158 .Times(1) | 158 .Times(1) |
159 .WillOnce(Return(sent_padding_bytes)); | 159 .WillOnce(Return(sent_padding_bytes)); |
160 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); | 160 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); |
161 EXPECT_CALL(rtp_1, HasBweExtensions()).Times(1).WillOnce(Return(true)); | 161 EXPECT_CALL(rtp_1, HasBweExtensions()).Times(1).WillOnce(Return(true)); |
162 EXPECT_CALL(rtp_1, | 162 EXPECT_CALL(rtp_1, |
163 TimeToSendPadding(requested_padding_bytes - sent_padding_bytes, | 163 TimeToSendPadding(requested_padding_bytes - sent_padding_bytes, |
164 Field(&PacedPacketInfo::probe_cluster_id, 111))) | 164 Field(&PacedPacketInfo::probe_cluster_id, 111))) |
165 .Times(1) | 165 .Times(1) |
166 .WillOnce(Return(requested_padding_bytes - sent_padding_bytes)); | 166 .WillOnce(Return(requested_padding_bytes - sent_padding_bytes)); |
167 EXPECT_EQ(requested_padding_bytes, | 167 EXPECT_EQ(requested_padding_bytes, |
168 packet_router_->TimeToSendPadding( | 168 packet_router.TimeToSendPadding( |
169 requested_padding_bytes, | 169 requested_padding_bytes, |
170 PacedPacketInfo(111, kProbeMinBytes, kProbeMinBytes))); | 170 PacedPacketInfo(111, kProbeMinBytes, kProbeMinBytes))); |
171 | 171 |
172 // Let only the lower priority module be sending and verify the padding | 172 // Let only the lower priority module be sending and verify the padding |
173 // request is routed there. | 173 // request is routed there. |
174 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(false)); | 174 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(false)); |
175 EXPECT_CALL(rtp_2, TimeToSendPadding(requested_padding_bytes, _)).Times(0); | 175 EXPECT_CALL(rtp_2, TimeToSendPadding(requested_padding_bytes, _)).Times(0); |
176 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); | 176 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); |
177 EXPECT_CALL(rtp_1, HasBweExtensions()).Times(1).WillOnce(Return(true)); | 177 EXPECT_CALL(rtp_1, HasBweExtensions()).Times(1).WillOnce(Return(true)); |
178 EXPECT_CALL(rtp_1, TimeToSendPadding(_, _)) | 178 EXPECT_CALL(rtp_1, TimeToSendPadding(_, _)) |
179 .Times(1) | 179 .Times(1) |
180 .WillOnce(Return(sent_padding_bytes)); | 180 .WillOnce(Return(sent_padding_bytes)); |
181 EXPECT_EQ(sent_padding_bytes, | 181 EXPECT_EQ(sent_padding_bytes, |
182 packet_router_->TimeToSendPadding( | 182 packet_router.TimeToSendPadding( |
183 requested_padding_bytes, | 183 requested_padding_bytes, |
184 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, | 184 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, |
185 kProbeMinBytes))); | 185 kProbeMinBytes))); |
186 | 186 |
187 // No sending module at all. | 187 // No sending module at all. |
188 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(false)); | 188 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(false)); |
189 EXPECT_CALL(rtp_1, TimeToSendPadding(requested_padding_bytes, _)).Times(0); | 189 EXPECT_CALL(rtp_1, TimeToSendPadding(requested_padding_bytes, _)).Times(0); |
190 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(false)); | 190 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(false)); |
191 EXPECT_CALL(rtp_2, TimeToSendPadding(_, _)).Times(0); | 191 EXPECT_CALL(rtp_2, TimeToSendPadding(_, _)).Times(0); |
192 EXPECT_EQ(0u, | 192 EXPECT_EQ(0u, |
193 packet_router_->TimeToSendPadding( | 193 packet_router.TimeToSendPadding( |
194 requested_padding_bytes, | 194 requested_padding_bytes, |
195 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, | 195 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, |
196 kProbeMinBytes))); | 196 kProbeMinBytes))); |
197 | 197 |
198 // Only one module has BWE extensions. | 198 // Only one module has BWE extensions. |
199 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); | 199 EXPECT_CALL(rtp_1, SendingMedia()).Times(1).WillOnce(Return(true)); |
200 EXPECT_CALL(rtp_1, HasBweExtensions()).Times(1).WillOnce(Return(false)); | 200 EXPECT_CALL(rtp_1, HasBweExtensions()).Times(1).WillOnce(Return(false)); |
201 EXPECT_CALL(rtp_1, TimeToSendPadding(requested_padding_bytes, _)).Times(0); | 201 EXPECT_CALL(rtp_1, TimeToSendPadding(requested_padding_bytes, _)).Times(0); |
202 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); | 202 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); |
203 EXPECT_CALL(rtp_2, HasBweExtensions()).Times(1).WillOnce(Return(true)); | 203 EXPECT_CALL(rtp_2, HasBweExtensions()).Times(1).WillOnce(Return(true)); |
204 EXPECT_CALL(rtp_2, TimeToSendPadding(requested_padding_bytes, _)) | 204 EXPECT_CALL(rtp_2, TimeToSendPadding(requested_padding_bytes, _)) |
205 .Times(1) | 205 .Times(1) |
206 .WillOnce(Return(sent_padding_bytes)); | 206 .WillOnce(Return(sent_padding_bytes)); |
207 EXPECT_EQ(sent_padding_bytes, | 207 EXPECT_EQ(sent_padding_bytes, |
208 packet_router_->TimeToSendPadding( | 208 packet_router.TimeToSendPadding( |
209 requested_padding_bytes, | 209 requested_padding_bytes, |
210 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, | 210 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, |
211 kProbeMinBytes))); | 211 kProbeMinBytes))); |
212 | 212 |
213 packet_router_->RemoveSendRtpModule(&rtp_1); | 213 packet_router.RemoveSendRtpModule(&rtp_1); |
214 | 214 |
215 // rtp_1 has been removed, try sending padding and make sure rtp_1 isn't asked | 215 // rtp_1 has been removed, try sending padding and make sure rtp_1 isn't asked |
216 // to send by not expecting any calls. Instead verify rtp_2 is called. | 216 // to send by not expecting any calls. Instead verify rtp_2 is called. |
217 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); | 217 EXPECT_CALL(rtp_2, SendingMedia()).Times(1).WillOnce(Return(true)); |
218 EXPECT_CALL(rtp_2, HasBweExtensions()).Times(1).WillOnce(Return(true)); | 218 EXPECT_CALL(rtp_2, HasBweExtensions()).Times(1).WillOnce(Return(true)); |
219 EXPECT_CALL(rtp_2, TimeToSendPadding(requested_padding_bytes, _)).Times(1); | 219 EXPECT_CALL(rtp_2, TimeToSendPadding(requested_padding_bytes, _)).Times(1); |
220 EXPECT_EQ(0u, | 220 EXPECT_EQ(0u, |
221 packet_router_->TimeToSendPadding( | 221 packet_router.TimeToSendPadding( |
222 requested_padding_bytes, | 222 requested_padding_bytes, |
223 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, | 223 PacedPacketInfo(PacedPacketInfo::kNotAProbe, kProbeMinBytes, |
224 kProbeMinBytes))); | 224 kProbeMinBytes))); |
225 | 225 |
226 packet_router_->RemoveSendRtpModule(&rtp_2); | 226 packet_router.RemoveSendRtpModule(&rtp_2); |
227 } | 227 } |
228 | 228 |
229 TEST_F(PacketRouterTest, SenderOnlyFunctionsRespectSendingMedia) { | 229 TEST(PacketRouterTest, SenderOnlyFunctionsRespectSendingMedia) { |
230 PacketRouter packet_router; | |
230 NiceMock<MockRtpRtcp> rtp; | 231 NiceMock<MockRtpRtcp> rtp; |
231 packet_router_->AddSendRtpModule(&rtp, false); | 232 packet_router.AddSendRtpModule(&rtp, false); |
232 static const uint16_t kSsrc = 1234; | 233 static const uint16_t kSsrc = 1234; |
233 EXPECT_CALL(rtp, SSRC()).WillRepeatedly(Return(kSsrc)); | 234 EXPECT_CALL(rtp, SSRC()).WillRepeatedly(Return(kSsrc)); |
234 EXPECT_CALL(rtp, SendingMedia()).WillRepeatedly(Return(false)); | 235 EXPECT_CALL(rtp, SendingMedia()).WillRepeatedly(Return(false)); |
235 | 236 |
236 // Verify that TimeToSendPacket does not end up in a receiver. | 237 // Verify that TimeToSendPacket does not end up in a receiver. |
237 EXPECT_CALL(rtp, TimeToSendPacket(_, _, _, _, _)).Times(0); | 238 EXPECT_CALL(rtp, TimeToSendPacket(_, _, _, _, _)).Times(0); |
238 EXPECT_TRUE(packet_router_->TimeToSendPacket( | 239 EXPECT_TRUE(packet_router.TimeToSendPacket( |
239 kSsrc, 1, 1, false, PacedPacketInfo(PacedPacketInfo::kNotAProbe, | 240 kSsrc, 1, 1, false, PacedPacketInfo(PacedPacketInfo::kNotAProbe, |
240 kProbeMinBytes, kProbeMinBytes))); | 241 kProbeMinBytes, kProbeMinBytes))); |
241 // Verify that TimeToSendPadding does not end up in a receiver. | 242 // Verify that TimeToSendPadding does not end up in a receiver. |
242 EXPECT_CALL(rtp, TimeToSendPadding(_, _)).Times(0); | 243 EXPECT_CALL(rtp, TimeToSendPadding(_, _)).Times(0); |
243 EXPECT_EQ(0u, | 244 EXPECT_EQ(0u, |
244 packet_router_->TimeToSendPadding( | 245 packet_router.TimeToSendPadding( |
245 200, PacedPacketInfo(PacedPacketInfo::kNotAProbe, | 246 200, PacedPacketInfo(PacedPacketInfo::kNotAProbe, |
246 kProbeMinBytes, kProbeMinBytes))); | 247 kProbeMinBytes, kProbeMinBytes))); |
247 | 248 |
248 packet_router_->RemoveSendRtpModule(&rtp); | 249 packet_router.RemoveSendRtpModule(&rtp); |
249 } | 250 } |
250 | 251 |
251 TEST_F(PacketRouterTest, AllocateSequenceNumbers) { | 252 TEST(PacketRouterTest, AllocateSequenceNumbers) { |
253 PacketRouter packet_router; | |
254 | |
252 const uint16_t kStartSeq = 0xFFF0; | 255 const uint16_t kStartSeq = 0xFFF0; |
253 const size_t kNumPackets = 32; | 256 const size_t kNumPackets = 32; |
254 | 257 |
255 packet_router_->SetTransportWideSequenceNumber(kStartSeq - 1); | 258 packet_router.SetTransportWideSequenceNumber(kStartSeq - 1); |
256 | 259 |
257 for (size_t i = 0; i < kNumPackets; ++i) { | 260 for (size_t i = 0; i < kNumPackets; ++i) { |
258 uint16_t seq = packet_router_->AllocateSequenceNumber(); | 261 uint16_t seq = packet_router.AllocateSequenceNumber(); |
259 uint32_t expected_unwrapped_seq = static_cast<uint32_t>(kStartSeq) + i; | 262 uint32_t expected_unwrapped_seq = static_cast<uint32_t>(kStartSeq) + i; |
260 EXPECT_EQ(static_cast<uint16_t>(expected_unwrapped_seq & 0xFFFF), seq); | 263 EXPECT_EQ(static_cast<uint16_t>(expected_unwrapped_seq & 0xFFFF), seq); |
261 } | 264 } |
262 } | 265 } |
263 | 266 |
264 TEST_F(PacketRouterTest, SendTransportFeedback) { | 267 TEST(PacketRouterTest, SendTransportFeedback) { |
268 PacketRouter packet_router; | |
265 NiceMock<MockRtpRtcp> rtp_1; | 269 NiceMock<MockRtpRtcp> rtp_1; |
266 NiceMock<MockRtpRtcp> rtp_2; | 270 NiceMock<MockRtpRtcp> rtp_2; |
267 packet_router_->AddSendRtpModule(&rtp_1, false); | 271 |
268 packet_router_->AddReceiveRtpModule(&rtp_2, false); | 272 packet_router.AddSendRtpModule(&rtp_1, false); |
273 packet_router.AddReceiveRtpModule(&rtp_2, false); | |
269 | 274 |
270 rtcp::TransportFeedback feedback; | 275 rtcp::TransportFeedback feedback; |
271 EXPECT_CALL(rtp_1, SendFeedbackPacket(_)).Times(1).WillOnce(Return(true)); | 276 EXPECT_CALL(rtp_1, SendFeedbackPacket(_)).Times(1).WillOnce(Return(true)); |
272 packet_router_->SendTransportFeedback(&feedback); | 277 packet_router.SendTransportFeedback(&feedback); |
273 packet_router_->RemoveSendRtpModule(&rtp_1); | 278 packet_router.RemoveSendRtpModule(&rtp_1); |
274 EXPECT_CALL(rtp_2, SendFeedbackPacket(_)).Times(1).WillOnce(Return(true)); | 279 EXPECT_CALL(rtp_2, SendFeedbackPacket(_)).Times(1).WillOnce(Return(true)); |
275 packet_router_->SendTransportFeedback(&feedback); | 280 packet_router.SendTransportFeedback(&feedback); |
276 packet_router_->RemoveReceiveRtpModule(&rtp_2); | 281 packet_router.RemoveReceiveRtpModule(&rtp_2); |
277 } | 282 } |
278 | 283 |
279 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | 284 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
280 TEST_F(PacketRouterTest, DoubleRegistrationOfSendModuleDisallowed) { | 285 TEST(PacketRouterTest, DoubleRegistrationOfSendModuleDisallowed) { |
286 PacketRouter packet_router; | |
281 NiceMock<MockRtpRtcp> module; | 287 NiceMock<MockRtpRtcp> module; |
282 | 288 |
283 constexpr bool remb_candidate = false; // Value irrelevant. | 289 constexpr bool remb_candidate = false; // Value irrelevant. |
284 packet_router_->AddSendRtpModule(&module, remb_candidate); | 290 packet_router.AddSendRtpModule(&module, remb_candidate); |
285 EXPECT_DEATH(packet_router_->AddSendRtpModule(&module, remb_candidate), ""); | 291 EXPECT_DEATH(packet_router.AddSendRtpModule(&module, remb_candidate), ""); |
286 | 292 |
287 // Test tear-down | 293 // Test tear-down |
288 packet_router_->RemoveSendRtpModule(&module); | 294 packet_router.RemoveSendRtpModule(&module); |
289 } | 295 } |
290 | 296 |
291 TEST_F(PacketRouterTest, DoubleRegistrationOfReceiveModuleDisallowed) { | 297 TEST(PacketRouterTest, DoubleRegistrationOfReceiveModuleDisallowed) { |
298 PacketRouter packet_router; | |
292 NiceMock<MockRtpRtcp> module; | 299 NiceMock<MockRtpRtcp> module; |
293 | 300 |
294 constexpr bool remb_candidate = false; // Value irrelevant. | 301 constexpr bool remb_candidate = false; // Value irrelevant. |
295 packet_router_->AddReceiveRtpModule(&module, remb_candidate); | 302 packet_router.AddReceiveRtpModule(&module, remb_candidate); |
296 EXPECT_DEATH(packet_router_->AddReceiveRtpModule(&module, remb_candidate), | 303 EXPECT_DEATH(packet_router.AddReceiveRtpModule(&module, remb_candidate), ""); |
297 ""); | |
298 | 304 |
299 // Test tear-down | 305 // Test tear-down |
300 packet_router_->RemoveReceiveRtpModule(&module); | 306 packet_router.RemoveReceiveRtpModule(&module); |
301 } | 307 } |
302 | 308 |
303 TEST_F(PacketRouterTest, RemovalOfNeverAddedSendModuleDisallowed) { | 309 TEST(PacketRouterTest, RemovalOfNeverAddedSendModuleDisallowed) { |
310 PacketRouter packet_router; | |
304 NiceMock<MockRtpRtcp> module; | 311 NiceMock<MockRtpRtcp> module; |
305 | 312 |
306 EXPECT_DEATH(packet_router_->RemoveSendRtpModule(&module), ""); | 313 EXPECT_DEATH(packet_router.RemoveSendRtpModule(&module), ""); |
307 } | 314 } |
308 | 315 |
309 TEST_F(PacketRouterTest, RemovalOfNeverAddedReceiveModuleDisallowed) { | 316 TEST(PacketRouterTest, RemovalOfNeverAddedReceiveModuleDisallowed) { |
317 PacketRouter packet_router; | |
310 NiceMock<MockRtpRtcp> module; | 318 NiceMock<MockRtpRtcp> module; |
311 | 319 |
312 EXPECT_DEATH(packet_router_->RemoveReceiveRtpModule(&module), ""); | 320 EXPECT_DEATH(packet_router.RemoveReceiveRtpModule(&module), ""); |
313 } | 321 } |
314 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | 322 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
315 | 323 |
316 // TODO(eladalon): Remove this test; it should be covered by: | 324 // TODO(eladalon): Remove this test; it should be covered by: |
317 // 1. SendCandidatePreferredOverReceiveCandidate_SendModuleAddedFirst | 325 // 1. SendCandidatePreferredOverReceiveCandidate_SendModuleAddedFirst |
318 // 2. SendCandidatePreferredOverReceiveCandidate_ReceiveModuleAddedFirst | 326 // 2. SendCandidatePreferredOverReceiveCandidate_ReceiveModuleAddedFirst |
319 // 3. LowerEstimateToSendRemb | 327 // 3. LowerEstimateToSendRemb |
320 // (Not removing in this CL to prove it doesn't break this test.) | 328 // (Not removing in this CL to prove it doesn't break this test.) |
321 TEST(PacketRouterRembTest, PreferSendModuleOverReceiveModule) { | 329 TEST(PacketRouterRembTest, PreferSendModuleOverReceiveModule) { |
322 rtc::ScopedFakeClock clock; | 330 rtc::ScopedFakeClock clock; |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
698 EXPECT_CALL(receive_module, SetREMBData(bitrate_estimate, ssrcs)).Times(1); | 706 EXPECT_CALL(receive_module, SetREMBData(bitrate_estimate, ssrcs)).Times(1); |
699 | 707 |
700 clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); | 708 clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000)); |
701 packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 709 packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
702 | 710 |
703 // Test tear-down | 711 // Test tear-down |
704 packet_router.RemoveReceiveRtpModule(&receive_module); | 712 packet_router.RemoveReceiveRtpModule(&receive_module); |
705 } | 713 } |
706 | 714 |
707 } // namespace webrtc | 715 } // namespace webrtc |
OLD | NEW |