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 |
11 #include <memory> | 11 #include <memory> |
12 | 12 |
13 #include "webrtc/p2p/base/basicpacketsocketfactory.h" | 13 #include "webrtc/p2p/base/basicpacketsocketfactory.h" |
14 #include "webrtc/p2p/base/stunport.h" | 14 #include "webrtc/p2p/base/stunport.h" |
15 #include "webrtc/p2p/base/teststunserver.h" | 15 #include "webrtc/p2p/base/teststunserver.h" |
16 #include "webrtc/base/gunit.h" | 16 #include "webrtc/base/gunit.h" |
17 #include "webrtc/base/helpers.h" | 17 #include "webrtc/base/helpers.h" |
18 #include "webrtc/base/physicalsocketserver.h" | 18 #include "webrtc/base/physicalsocketserver.h" |
19 #include "webrtc/base/socketaddress.h" | 19 #include "webrtc/base/socketaddress.h" |
20 #include "webrtc/base/ssladapter.h" | 20 #include "webrtc/base/ssladapter.h" |
21 #include "webrtc/base/virtualsocketserver.h" | 21 #include "webrtc/base/virtualsocketserver.h" |
22 | 22 |
23 using cricket::ServerAddresses; | 23 using cricket::ServerAddresses; |
24 using rtc::SocketAddress; | 24 using rtc::SocketAddress; |
25 | 25 |
26 static const SocketAddress kLocalAddr("127.0.0.1", 0); | 26 static const SocketAddress kLocalAddr("127.0.0.1", 0); |
27 static const SocketAddress kStunAddr1("127.0.0.1", 5000); | 27 static const SocketAddress kStunAddr1("127.0.0.1", 5000); |
28 static const SocketAddress kStunAddr2("127.0.0.1", 4000); | 28 static const SocketAddress kStunAddr2("127.0.0.1", 4000); |
| 29 static const SocketAddress kStunAddr3("127.0.0.1", 3000); |
29 static const SocketAddress kBadAddr("0.0.0.1", 5000); | 30 static const SocketAddress kBadAddr("0.0.0.1", 5000); |
30 static const SocketAddress kStunHostnameAddr("localhost", 5000); | 31 static const SocketAddress kStunHostnameAddr("localhost", 5000); |
31 static const SocketAddress kBadHostnameAddr("not-a-real-hostname", 5000); | 32 static const SocketAddress kBadHostnameAddr("not-a-real-hostname", 5000); |
32 static const int kTimeoutMs = 10000; | 33 static const int kTimeoutMs = 10000; |
33 // stun prio = 100 << 24 | 30 (IPV4) << 8 | 256 - 0 | 34 // stun prio = 100 << 24 | 30 (IPV4) << 8 | 256 - 0 |
34 static const uint32_t kStunCandidatePriority = 1677729535; | 35 static const uint32_t kStunCandidatePriority = 1677729535; |
35 static const int kInfiniteLifetime = -1; | 36 static const int kInfiniteLifetime = -1; |
36 static const int kHighCostPortKeepaliveLifetimeMs = 2 * 60 * 1000; | 37 static const int kHighCostPortKeepaliveLifetimeMs = 2 * 60 * 1000; |
37 | 38 |
38 // Tests connecting a StunPort to a fake STUN server (cricket::StunServer) | 39 // Tests connecting a StunPort to a fake STUN server (cricket::StunServer) |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 CreateStunPort(stun_servers); | 300 CreateStunPort(stun_servers); |
300 EXPECT_EQ("stun", port()->Type()); | 301 EXPECT_EQ("stun", port()->Type()); |
301 PrepareAddress(); | 302 PrepareAddress(); |
302 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 303 EXPECT_TRUE_WAIT(done(), kTimeoutMs); |
303 EXPECT_EQ(2U, port()->Candidates().size()); | 304 EXPECT_EQ(2U, port()->Candidates().size()); |
304 EXPECT_EQ(port()->Candidates()[0].relay_protocol(), ""); | 305 EXPECT_EQ(port()->Candidates()[0].relay_protocol(), ""); |
305 EXPECT_EQ(port()->Candidates()[1].relay_protocol(), ""); | 306 EXPECT_EQ(port()->Candidates()[1].relay_protocol(), ""); |
306 } | 307 } |
307 | 308 |
308 // Test that the stun_keepalive_lifetime is set correctly based on the network | 309 // Test that the stun_keepalive_lifetime is set correctly based on the network |
309 // type on a STUN port. | 310 // type on a STUN port. Also test that it will be updated if the network type |
| 311 // changes. |
310 TEST_F(StunPortTest, TestStunPortGetStunKeepaliveLifetime) { | 312 TEST_F(StunPortTest, TestStunPortGetStunKeepaliveLifetime) { |
311 // Lifetime for the default network type is |kInfiniteLifetime|. | 313 // Lifetime for the default (unknown) network type is |kInfiniteLifetime|. |
312 CreateStunPort(kStunAddr1); | 314 CreateStunPort(kStunAddr1); |
313 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); | 315 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); |
314 | |
315 // Lifetime for the cellular network is |kHighCostPortKeepaliveLifetimeMs| | 316 // Lifetime for the cellular network is |kHighCostPortKeepaliveLifetimeMs| |
316 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); | 317 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); |
317 CreateStunPort(kStunAddr2); | |
318 EXPECT_EQ(kHighCostPortKeepaliveLifetimeMs, | 318 EXPECT_EQ(kHighCostPortKeepaliveLifetimeMs, |
319 port()->stun_keepalive_lifetime()); | 319 port()->stun_keepalive_lifetime()); |
| 320 |
| 321 // Lifetime for the wifi network is |kInfiniteLifetime|. |
| 322 SetNetworkType(rtc::ADAPTER_TYPE_WIFI); |
| 323 CreateStunPort(kStunAddr2); |
| 324 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); |
320 } | 325 } |
321 | 326 |
322 // Test that the stun_keepalive_lifetime is set correctly based on the network | 327 // Test that the stun_keepalive_lifetime is set correctly based on the network |
323 // type on a shared STUN port (UDPPort). | 328 // type on a shared STUN port (UDPPort). Also test that it will be updated |
| 329 // if the network type changes. |
324 TEST_F(StunPortTest, TestUdpPortGetStunKeepaliveLifetime) { | 330 TEST_F(StunPortTest, TestUdpPortGetStunKeepaliveLifetime) { |
325 // Lifetime for the default network type is |kInfiniteLifetime|. | 331 // Lifetime for the default (unknown) network type is |kInfiniteLifetime|. |
326 CreateSharedStunPort(kStunAddr1); | 332 CreateSharedStunPort(kStunAddr1); |
327 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); | 333 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); |
328 | 334 // Lifetime for the cellular network is |kHighCostPortKeepaliveLifetimeMs|. |
329 // Lifetime for the cellular network is |kHighCostPortKeepaliveLifetimeMs| | |
330 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); | 335 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); |
331 CreateSharedStunPort(kStunAddr2); | |
332 EXPECT_EQ(kHighCostPortKeepaliveLifetimeMs, | 336 EXPECT_EQ(kHighCostPortKeepaliveLifetimeMs, |
333 port()->stun_keepalive_lifetime()); | 337 port()->stun_keepalive_lifetime()); |
| 338 |
| 339 // Lifetime for the wifi network type is |kInfiniteLifetime|. |
| 340 SetNetworkType(rtc::ADAPTER_TYPE_WIFI); |
| 341 CreateSharedStunPort(kStunAddr2); |
| 342 EXPECT_EQ(kInfiniteLifetime, port()->stun_keepalive_lifetime()); |
334 } | 343 } |
335 | 344 |
336 // Test that STUN binding requests will be stopped shortly if the keep-alive | 345 // Test that STUN binding requests will be stopped shortly if the keep-alive |
337 // lifetime is short. | 346 // lifetime is short. |
338 TEST_F(StunPortTest, TestStunBindingRequestShortLifetime) { | 347 TEST_F(StunPortTest, TestStunBindingRequestShortLifetime) { |
339 SetKeepaliveDelay(101); | 348 SetKeepaliveDelay(101); |
340 SetKeepaliveLifetime(100); | 349 SetKeepaliveLifetime(100); |
341 CreateStunPort(kStunAddr1); | 350 CreateStunPort(kStunAddr1); |
342 PrepareAddress(); | 351 PrepareAddress(); |
343 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 352 EXPECT_TRUE_WAIT(done(), kTimeoutMs); |
344 EXPECT_TRUE_WAIT(!port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST), | 353 EXPECT_TRUE_WAIT(!port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST), |
345 2000); | 354 2000); |
346 } | 355 } |
347 | 356 |
348 // Test that by default, the STUN binding requests will last for a long time. | 357 // Test that by default, the STUN binding requests will last for a long time. |
349 TEST_F(StunPortTest, TestStunBindingRequestLongLifetime) { | 358 TEST_F(StunPortTest, TestStunBindingRequestLongLifetime) { |
350 SetKeepaliveDelay(101); | 359 SetKeepaliveDelay(101); |
351 CreateStunPort(kStunAddr1); | 360 CreateStunPort(kStunAddr1); |
352 PrepareAddress(); | 361 PrepareAddress(); |
353 EXPECT_TRUE_WAIT(done(), kTimeoutMs); | 362 EXPECT_TRUE_WAIT(done(), kTimeoutMs); |
354 rtc::Thread::Current()->ProcessMessages(1000); | 363 rtc::Thread::Current()->ProcessMessages(1000); |
355 EXPECT_TRUE(port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST)); | 364 EXPECT_TRUE(port()->HasPendingRequest(cricket::STUN_BINDING_REQUEST)); |
356 } | 365 } |
OLD | NEW |