OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2009 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 25 matching lines...) Expand all Loading... |
36 // fix flaky tests. | 36 // fix flaky tests. |
37 static const int kTimeoutMs = 15000; | 37 static const int kTimeoutMs = 15000; |
38 // stun prio = 100 << 24 | 30 (IPV4) << 8 | 256 - 0 | 38 // stun prio = 100 << 24 | 30 (IPV4) << 8 | 256 - 0 |
39 static const uint32_t kStunCandidatePriority = 1677729535; | 39 static const uint32_t kStunCandidatePriority = 1677729535; |
40 static const int kInfiniteLifetime = -1; | 40 static const int kInfiniteLifetime = -1; |
41 static const int kHighCostPortKeepaliveLifetimeMs = 2 * 60 * 1000; | 41 static const int kHighCostPortKeepaliveLifetimeMs = 2 * 60 * 1000; |
42 | 42 |
43 // Tests connecting a StunPort to a fake STUN server (cricket::StunServer) | 43 // Tests connecting a StunPort to a fake STUN server (cricket::StunServer) |
44 // TODO: Use a VirtualSocketServer here. We have to use a | 44 // TODO: Use a VirtualSocketServer here. We have to use a |
45 // PhysicalSocketServer right now since DNS is not part of SocketServer yet. | 45 // PhysicalSocketServer right now since DNS is not part of SocketServer yet. |
46 class StunPortTest : public testing::Test, | 46 class StunPortTestBase : public testing::Test, public sigslot::has_slots<> { |
47 public sigslot::has_slots<> { | |
48 public: | 47 public: |
49 StunPortTest() | 48 StunPortTestBase() |
50 : pss_(new rtc::PhysicalSocketServer), | 49 : pss_(new rtc::PhysicalSocketServer), |
51 ss_(new rtc::VirtualSocketServer(pss_.get())), | 50 ss_(new rtc::VirtualSocketServer(pss_.get())), |
52 ss_scope_(ss_.get()), | 51 ss_scope_(ss_.get()), |
53 network_("unittest", "unittest", rtc::IPAddress(INADDR_ANY), 32), | 52 network_("unittest", "unittest", rtc::IPAddress(INADDR_ANY), 32), |
54 socket_factory_(rtc::Thread::Current()), | 53 socket_factory_(rtc::Thread::Current()), |
55 stun_server_1_(cricket::TestStunServer::Create(rtc::Thread::Current(), | 54 stun_server_1_(cricket::TestStunServer::Create(rtc::Thread::Current(), |
56 kStunAddr1)), | 55 kStunAddr1)), |
57 stun_server_2_(cricket::TestStunServer::Create(rtc::Thread::Current(), | 56 stun_server_2_(cricket::TestStunServer::Create(rtc::Thread::Current(), |
58 kStunAddr2)), | 57 kStunAddr2)), |
59 done_(false), | 58 done_(false), |
60 error_(false), | 59 error_(false), |
61 stun_keepalive_delay_(0), | 60 stun_keepalive_delay_(1), |
62 stun_keepalive_lifetime_(-1) {} | 61 stun_keepalive_lifetime_(-1) {} |
63 | 62 |
64 cricket::UDPPort* port() const { return stun_port_.get(); } | 63 cricket::UDPPort* port() const { return stun_port_.get(); } |
65 bool done() const { return done_; } | 64 bool done() const { return done_; } |
66 bool error() const { return error_; } | 65 bool error() const { return error_; } |
67 | 66 |
68 void SetNetworkType(rtc::AdapterType adapter_type) { | 67 void SetNetworkType(rtc::AdapterType adapter_type) { |
69 network_.set_type(adapter_type); | 68 network_.set_type(adapter_type); |
70 } | 69 } |
71 | 70 |
72 void CreateStunPort(const rtc::SocketAddress& server_addr) { | 71 void CreateStunPort(const rtc::SocketAddress& server_addr) { |
73 ServerAddresses stun_servers; | 72 ServerAddresses stun_servers; |
74 stun_servers.insert(server_addr); | 73 stun_servers.insert(server_addr); |
75 CreateStunPort(stun_servers); | 74 CreateStunPort(stun_servers); |
76 } | 75 } |
77 | 76 |
78 void CreateStunPort(const ServerAddresses& stun_servers) { | 77 void CreateStunPort(const ServerAddresses& stun_servers) { |
79 stun_port_.reset(cricket::StunPort::Create( | 78 stun_port_.reset(cricket::StunPort::Create( |
80 rtc::Thread::Current(), &socket_factory_, &network_, | 79 rtc::Thread::Current(), &socket_factory_, &network_, |
81 kLocalAddr.ipaddr(), 0, 0, rtc::CreateRandomString(16), | 80 kLocalAddr.ipaddr(), 0, 0, rtc::CreateRandomString(16), |
82 rtc::CreateRandomString(22), stun_servers, std::string())); | 81 rtc::CreateRandomString(22), stun_servers, std::string())); |
83 stun_port_->set_stun_keepalive_delay(stun_keepalive_delay_); | 82 stun_port_->set_stun_keepalive_delay(stun_keepalive_delay_); |
84 // If |stun_keepalive_lifetime_| is negative, let the stun port | 83 // If |stun_keepalive_lifetime_| is negative, let the stun port |
85 // choose its lifetime from the network type. | 84 // choose its lifetime from the network type. |
86 if (stun_keepalive_lifetime_ >= 0) { | 85 if (stun_keepalive_lifetime_ >= 0) { |
87 stun_port_->set_stun_keepalive_lifetime(stun_keepalive_lifetime_); | 86 stun_port_->set_stun_keepalive_lifetime(stun_keepalive_lifetime_); |
88 } | 87 } |
89 stun_port_->SignalPortComplete.connect(this, | 88 stun_port_->SignalPortComplete.connect(this, |
90 &StunPortTest::OnPortComplete); | 89 &StunPortTestBase::OnPortComplete); |
91 stun_port_->SignalPortError.connect(this, | 90 stun_port_->SignalPortError.connect(this, &StunPortTestBase::OnPortError); |
92 &StunPortTest::OnPortError); | |
93 } | 91 } |
94 | 92 |
95 void CreateSharedUdpPort(const rtc::SocketAddress& server_addr) { | 93 void CreateSharedUdpPort(const rtc::SocketAddress& server_addr) { |
96 socket_.reset(socket_factory_.CreateUdpSocket( | 94 socket_.reset(socket_factory_.CreateUdpSocket( |
97 rtc::SocketAddress(kLocalAddr.ipaddr(), 0), 0, 0)); | 95 rtc::SocketAddress(kLocalAddr.ipaddr(), 0), 0, 0)); |
98 ASSERT_TRUE(socket_ != NULL); | 96 ASSERT_TRUE(socket_ != NULL); |
99 socket_->SignalReadPacket.connect(this, &StunPortTest::OnReadPacket); | 97 socket_->SignalReadPacket.connect(this, &StunPortTestBase::OnReadPacket); |
100 stun_port_.reset(cricket::UDPPort::Create( | 98 stun_port_.reset(cricket::UDPPort::Create( |
101 rtc::Thread::Current(), &socket_factory_, | 99 rtc::Thread::Current(), &socket_factory_, |
102 &network_, socket_.get(), | 100 &network_, socket_.get(), |
103 rtc::CreateRandomString(16), rtc::CreateRandomString(22), | 101 rtc::CreateRandomString(16), rtc::CreateRandomString(22), |
104 std::string(), false)); | 102 std::string(), false)); |
105 ASSERT_TRUE(stun_port_ != NULL); | 103 ASSERT_TRUE(stun_port_ != NULL); |
106 ServerAddresses stun_servers; | 104 ServerAddresses stun_servers; |
107 stun_servers.insert(server_addr); | 105 stun_servers.insert(server_addr); |
108 stun_port_->set_server_addresses(stun_servers); | 106 stun_port_->set_server_addresses(stun_servers); |
109 stun_port_->SignalPortComplete.connect(this, | 107 stun_port_->SignalPortComplete.connect(this, |
110 &StunPortTest::OnPortComplete); | 108 &StunPortTestBase::OnPortComplete); |
111 stun_port_->SignalPortError.connect(this, | 109 stun_port_->SignalPortError.connect(this, &StunPortTestBase::OnPortError); |
112 &StunPortTest::OnPortError); | |
113 } | 110 } |
114 | 111 |
115 void PrepareAddress() { | 112 void PrepareAddress() { |
116 stun_port_->PrepareAddress(); | 113 stun_port_->PrepareAddress(); |
117 } | 114 } |
118 | 115 |
119 void OnReadPacket(rtc::AsyncPacketSocket* socket, const char* data, | 116 void OnReadPacket(rtc::AsyncPacketSocket* socket, const char* data, |
120 size_t size, const rtc::SocketAddress& remote_addr, | 117 size_t size, const rtc::SocketAddress& remote_addr, |
121 const rtc::PacketTime& packet_time) { | 118 const rtc::PacketTime& packet_time) { |
122 stun_port_->HandleIncomingPacket( | 119 stun_port_->HandleIncomingPacket( |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 std::unique_ptr<cricket::UDPPort> stun_port_; | 166 std::unique_ptr<cricket::UDPPort> stun_port_; |
170 std::unique_ptr<cricket::TestStunServer> stun_server_1_; | 167 std::unique_ptr<cricket::TestStunServer> stun_server_1_; |
171 std::unique_ptr<cricket::TestStunServer> stun_server_2_; | 168 std::unique_ptr<cricket::TestStunServer> stun_server_2_; |
172 std::unique_ptr<rtc::AsyncPacketSocket> socket_; | 169 std::unique_ptr<rtc::AsyncPacketSocket> socket_; |
173 bool done_; | 170 bool done_; |
174 bool error_; | 171 bool error_; |
175 int stun_keepalive_delay_; | 172 int stun_keepalive_delay_; |
176 int stun_keepalive_lifetime_; | 173 int stun_keepalive_lifetime_; |
177 }; | 174 }; |
178 | 175 |
| 176 class StunPortTestWithRealClock : public StunPortTestBase {}; |
| 177 |
| 178 class FakeClockBase { |
| 179 public: |
| 180 rtc::ScopedFakeClock fake_clock; |
| 181 }; |
| 182 |
| 183 class StunPortTest : public FakeClockBase, public StunPortTestBase {}; |
| 184 |
179 // Test that we can create a STUN port. | 185 // Test that we can create a STUN port. |
180 TEST_F(StunPortTest, TestCreateStunPort) { | 186 TEST_F(StunPortTest, TestCreateStunPort) { |
181 CreateStunPort(kStunAddr1); | 187 CreateStunPort(kStunAddr1); |
182 EXPECT_EQ("stun", port()->Type()); | 188 EXPECT_EQ("stun", port()->Type()); |
183 EXPECT_EQ(0U, port()->Candidates().size()); | 189 EXPECT_EQ(0U, port()->Candidates().size()); |
184 } | 190 } |
185 | 191 |
186 // Test that we can create a UDP port. | 192 // Test that we can create a UDP port. |
187 TEST_F(StunPortTest, TestCreateUdpPort) { | 193 TEST_F(StunPortTest, TestCreateUdpPort) { |
188 CreateSharedUdpPort(kStunAddr1); | 194 CreateSharedUdpPort(kStunAddr1); |
189 EXPECT_EQ("local", port()->Type()); | 195 EXPECT_EQ("local", port()->Type()); |
190 EXPECT_EQ(0U, port()->Candidates().size()); | 196 EXPECT_EQ(0U, port()->Candidates().size()); |
191 } | 197 } |
192 | 198 |
193 // Test that we can get an address from a STUN server. | 199 // Test that we can get an address from a STUN server. |
194 TEST_F(StunPortTest, TestPrepareAddress) { | 200 TEST_F(StunPortTest, TestPrepareAddress) { |
195 CreateStunPort(kStunAddr1); | 201 CreateStunPort(kStunAddr1); |
196 PrepareAddress(); | 202 PrepareAddress(); |
197 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 203 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
198 ASSERT_EQ(1U, port()->Candidates().size()); | 204 ASSERT_EQ(1U, port()->Candidates().size()); |
199 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); | 205 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); |
200 | 206 |
201 // TODO: Add IPv6 tests here, once either physicalsocketserver supports | 207 // TODO: Add IPv6 tests here, once either physicalsocketserver supports |
202 // IPv6, or this test is changed to use VirtualSocketServer. | 208 // IPv6, or this test is changed to use VirtualSocketServer. |
203 } | 209 } |
204 | 210 |
205 // Test that we fail properly if we can't get an address. | 211 // Test that we fail properly if we can't get an address. |
206 TEST_F(StunPortTest, TestPrepareAddressFail) { | 212 TEST_F(StunPortTest, TestPrepareAddressFail) { |
207 CreateStunPort(kBadAddr); | 213 CreateStunPort(kBadAddr); |
208 PrepareAddress(); | 214 PrepareAddress(); |
209 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 215 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
210 EXPECT_TRUE(error()); | 216 EXPECT_TRUE(error()); |
211 EXPECT_EQ(0U, port()->Candidates().size()); | 217 EXPECT_EQ(0U, port()->Candidates().size()); |
212 } | 218 } |
213 | 219 |
214 // Test that we can get an address from a STUN server specified by a hostname. | 220 // Test that we can get an address from a STUN server specified by a hostname. |
215 TEST_F(StunPortTest, TestPrepareAddressHostname) { | 221 TEST_F(StunPortTest, TestPrepareAddressHostname) { |
216 CreateStunPort(kStunHostnameAddr); | 222 CreateStunPort(kStunHostnameAddr); |
217 PrepareAddress(); | 223 PrepareAddress(); |
218 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 224 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
219 ASSERT_EQ(1U, port()->Candidates().size()); | 225 ASSERT_EQ(1U, port()->Candidates().size()); |
220 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); | 226 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); |
221 EXPECT_EQ(kStunCandidatePriority, port()->Candidates()[0].priority()); | 227 EXPECT_EQ(kStunCandidatePriority, port()->Candidates()[0].priority()); |
222 } | 228 } |
223 | 229 |
224 // Test that we handle hostname lookup failures properly. | 230 // Test that we handle hostname lookup failures properly. |
225 TEST_F(StunPortTest, TestPrepareAddressHostnameFail) { | 231 TEST_F(StunPortTestWithRealClock, TestPrepareAddressHostnameFail) { |
226 CreateStunPort(kBadHostnameAddr); | 232 CreateStunPort(kBadHostnameAddr); |
227 PrepareAddress(); | 233 PrepareAddress(); |
228 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 234 EXPECT_TRUE_WAIT(done(), kTimeoutMs); |
229 EXPECT_TRUE(error()); | 235 EXPECT_TRUE(error()); |
230 EXPECT_EQ(0U, port()->Candidates().size()); | 236 EXPECT_EQ(0U, port()->Candidates().size()); |
231 } | 237 } |
232 | 238 |
233 // This test verifies keepalive response messages don't result in | 239 // This test verifies keepalive response messages don't result in |
234 // additional candidate generation. | 240 // additional candidate generation. |
235 TEST_F(StunPortTest, TestKeepAliveResponse) { | 241 TEST_F(StunPortTest, TestKeepAliveResponse) { |
236 SetKeepaliveDelay(500); // 500ms of keepalive delay. | 242 SetKeepaliveDelay(500); // 500ms of keepalive delay. |
237 CreateStunPort(kStunHostnameAddr); | 243 CreateStunPort(kStunHostnameAddr); |
238 PrepareAddress(); | 244 PrepareAddress(); |
239 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 245 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
240 ASSERT_EQ(1U, port()->Candidates().size()); | 246 ASSERT_EQ(1U, port()->Candidates().size()); |
241 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); | 247 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); |
242 // Waiting for 1 seond, which will allow us to process | 248 SIMULATED_WAIT(false, 1000, fake_clock); |
243 // response for keepalive binding request. 500 ms is the keepalive delay. | 249 EXPECT_EQ(1U, port()->Candidates().size()); |
244 rtc::Thread::Current()->ProcessMessages(1000); | |
245 ASSERT_EQ(1U, port()->Candidates().size()); | |
246 } | 250 } |
247 | 251 |
248 // Test that a local candidate can be generated using a shared socket. | 252 // Test that a local candidate can be generated using a shared socket. |
249 TEST_F(StunPortTest, TestSharedSocketPrepareAddress) { | 253 TEST_F(StunPortTest, TestSharedSocketPrepareAddress) { |
250 CreateSharedUdpPort(kStunAddr1); | 254 CreateSharedUdpPort(kStunAddr1); |
251 PrepareAddress(); | 255 PrepareAddress(); |
252 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 256 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
253 ASSERT_EQ(1U, port()->Candidates().size()); | 257 ASSERT_EQ(1U, port()->Candidates().size()); |
254 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); | 258 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); |
255 } | 259 } |
256 | 260 |
257 // Test that we still a get a local candidate with invalid stun server hostname. | 261 // Test that we still a get a local candidate with invalid stun server hostname. |
258 // Also verifing that UDPPort can receive packets when stun address can't be | 262 // Also verifing that UDPPort can receive packets when stun address can't be |
259 // resolved. | 263 // resolved. |
260 TEST_F(StunPortTest, TestSharedSocketPrepareAddressInvalidHostname) { | 264 TEST_F(StunPortTestWithRealClock, |
| 265 TestSharedSocketPrepareAddressInvalidHostname) { |
261 CreateSharedUdpPort(kBadHostnameAddr); | 266 CreateSharedUdpPort(kBadHostnameAddr); |
262 PrepareAddress(); | 267 PrepareAddress(); |
263 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 268 EXPECT_TRUE_WAIT(done(), kTimeoutMs); |
264 ASSERT_EQ(1U, port()->Candidates().size()); | 269 ASSERT_EQ(1U, port()->Candidates().size()); |
265 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); | 270 EXPECT_TRUE(kLocalAddr.EqualIPs(port()->Candidates()[0].address())); |
266 | 271 |
267 // Send data to port after it's ready. This is to make sure, UDP port can | 272 // Send data to port after it's ready. This is to make sure, UDP port can |
268 // handle data with unresolved stun server address. | 273 // handle data with unresolved stun server address. |
269 std::string data = "some random data, sending to cricket::Port."; | 274 std::string data = "some random data, sending to cricket::Port."; |
270 SendData(data.c_str(), data.length()); | 275 SendData(data.c_str(), data.length()); |
271 // No crash is success. | 276 // No crash is success. |
272 } | 277 } |
273 | 278 |
274 // Test that the same address is added only once if two STUN servers are in use. | 279 // Test that the same address is added only once if two STUN servers are in use. |
275 TEST_F(StunPortTest, TestNoDuplicatedAddressWithTwoStunServers) { | 280 TEST_F(StunPortTest, TestNoDuplicatedAddressWithTwoStunServers) { |
276 ServerAddresses stun_servers; | 281 ServerAddresses stun_servers; |
277 stun_servers.insert(kStunAddr1); | 282 stun_servers.insert(kStunAddr1); |
278 stun_servers.insert(kStunAddr2); | 283 stun_servers.insert(kStunAddr2); |
279 CreateStunPort(stun_servers); | 284 CreateStunPort(stun_servers); |
280 EXPECT_EQ("stun", port()->Type()); | 285 EXPECT_EQ("stun", port()->Type()); |
281 PrepareAddress(); | 286 PrepareAddress(); |
282 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 287 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
283 EXPECT_EQ(1U, port()->Candidates().size()); | 288 EXPECT_EQ(1U, port()->Candidates().size()); |
284 EXPECT_EQ(port()->Candidates()[0].relay_protocol(), ""); | 289 EXPECT_EQ(port()->Candidates()[0].relay_protocol(), ""); |
285 } | 290 } |
286 | 291 |
287 // Test that candidates can be allocated for multiple STUN servers, one of which | 292 // Test that candidates can be allocated for multiple STUN servers, one of which |
288 // is not reachable. | 293 // is not reachable. |
289 TEST_F(StunPortTest, TestMultipleStunServersWithBadServer) { | 294 TEST_F(StunPortTest, TestMultipleStunServersWithBadServer) { |
290 ServerAddresses stun_servers; | 295 ServerAddresses stun_servers; |
291 stun_servers.insert(kStunAddr1); | 296 stun_servers.insert(kStunAddr1); |
292 stun_servers.insert(kBadAddr); | 297 stun_servers.insert(kBadAddr); |
293 CreateStunPort(stun_servers); | 298 CreateStunPort(stun_servers); |
294 EXPECT_EQ("stun", port()->Type()); | 299 EXPECT_EQ("stun", port()->Type()); |
295 PrepareAddress(); | 300 PrepareAddress(); |
296 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 301 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
297 EXPECT_EQ(1U, port()->Candidates().size()); | 302 EXPECT_EQ(1U, port()->Candidates().size()); |
298 } | 303 } |
299 | 304 |
300 // Test that two candidates are allocated if the two STUN servers return | 305 // Test that two candidates are allocated if the two STUN servers return |
301 // different mapped addresses. | 306 // different mapped addresses. |
302 TEST_F(StunPortTest, TestTwoCandidatesWithTwoStunServersAcrossNat) { | 307 TEST_F(StunPortTest, TestTwoCandidatesWithTwoStunServersAcrossNat) { |
303 const SocketAddress kStunMappedAddr1("77.77.77.77", 0); | 308 const SocketAddress kStunMappedAddr1("77.77.77.77", 0); |
304 const SocketAddress kStunMappedAddr2("88.77.77.77", 0); | 309 const SocketAddress kStunMappedAddr2("88.77.77.77", 0); |
305 stun_server_1()->set_fake_stun_addr(kStunMappedAddr1); | 310 stun_server_1()->set_fake_stun_addr(kStunMappedAddr1); |
306 stun_server_2()->set_fake_stun_addr(kStunMappedAddr2); | 311 stun_server_2()->set_fake_stun_addr(kStunMappedAddr2); |
307 | 312 |
308 ServerAddresses stun_servers; | 313 ServerAddresses stun_servers; |
309 stun_servers.insert(kStunAddr1); | 314 stun_servers.insert(kStunAddr1); |
310 stun_servers.insert(kStunAddr2); | 315 stun_servers.insert(kStunAddr2); |
311 CreateStunPort(stun_servers); | 316 CreateStunPort(stun_servers); |
312 EXPECT_EQ("stun", port()->Type()); | 317 EXPECT_EQ("stun", port()->Type()); |
313 PrepareAddress(); | 318 PrepareAddress(); |
314 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 319 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
315 EXPECT_EQ(2U, port()->Candidates().size()); | 320 EXPECT_EQ(2U, port()->Candidates().size()); |
316 EXPECT_EQ(port()->Candidates()[0].relay_protocol(), ""); | 321 EXPECT_EQ(port()->Candidates()[0].relay_protocol(), ""); |
317 EXPECT_EQ(port()->Candidates()[1].relay_protocol(), ""); | 322 EXPECT_EQ(port()->Candidates()[1].relay_protocol(), ""); |
318 } | 323 } |
319 | 324 |
320 // Test that the stun_keepalive_lifetime is set correctly based on the network | 325 // Test that the stun_keepalive_lifetime is set correctly based on the network |
321 // type on a STUN port. Also test that it will be updated if the network type | 326 // type on a STUN port. Also test that it will be updated if the network type |
322 // changes. | 327 // changes. |
323 TEST_F(StunPortTest, TestStunPortGetStunKeepaliveLifetime) { | 328 TEST_F(StunPortTest, TestStunPortGetStunKeepaliveLifetime) { |
324 // Lifetime for the default (unknown) network type is |kInfiniteLifetime|. | 329 // Lifetime for the default (unknown) network type is |kInfiniteLifetime|. |
(...skipping 28 matching lines...) Expand all Loading... |
353 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); | 358 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); |
354 } | 359 } |
355 | 360 |
356 // Test that STUN binding requests will be stopped shortly if the keep-alive | 361 // Test that STUN binding requests will be stopped shortly if the keep-alive |
357 // lifetime is short. | 362 // lifetime is short. |
358 TEST_F(StunPortTest, TestStunBindingRequestShortLifetime) { | 363 TEST_F(StunPortTest, TestStunBindingRequestShortLifetime) { |
359 SetKeepaliveDelay(101); | 364 SetKeepaliveDelay(101); |
360 SetKeepaliveLifetime(100); | 365 SetKeepaliveLifetime(100); |
361 CreateStunPort(kStunAddr1); | 366 CreateStunPort(kStunAddr1); |
362 PrepareAddress(); | 367 PrepareAddress(); |
363 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 368 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
364 EXPECT_TRUE_WAIT(!port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST), | 369 EXPECT_TRUE_SIMULATED_WAIT( |
365 2000); | 370 !port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST), 2000, |
| 371 fake_clock); |
366 } | 372 } |
367 | 373 |
368 // Test that by default, the STUN binding requests will last for a long time. | 374 // Test that by default, the STUN binding requests will last for a long time. |
369 TEST_F(StunPortTest, TestStunBindingRequestLongLifetime) { | 375 TEST_F(StunPortTest, TestStunBindingRequestLongLifetime) { |
370 SetKeepaliveDelay(101); | 376 SetKeepaliveDelay(101); |
371 CreateStunPort(kStunAddr1); | 377 CreateStunPort(kStunAddr1); |
372 PrepareAddress(); | 378 PrepareAddress(); |
373 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 379 EXPECT_TRUE_SIMULATED_WAIT(done(), kTimeoutMs, fake_clock); |
374 rtc::Thread::Current()->ProcessMessages(1000); | 380 EXPECT_TRUE_SIMULATED_WAIT( |
375 EXPECT_TRUE(port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST)); | 381 port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST), 1000, |
| 382 fake_clock); |
376 } | 383 } |
OLD | NEW |