| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 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 #include <signal.h> | 12 #include <signal.h> |
| 13 #include <stdarg.h> | 13 #include <stdarg.h> |
| 14 | 14 |
| 15 #include "webrtc/base/gunit.h" | 15 #include "webrtc/base/gunit.h" |
| 16 #include "webrtc/base/logging.h" | 16 #include "webrtc/base/logging.h" |
| 17 #include "webrtc/base/networkmonitor.h" | 17 #include "webrtc/base/networkmonitor.h" |
| 18 #include "webrtc/base/physicalsocketserver.h" | 18 #include "webrtc/base/physicalsocketserver.h" |
| 19 #include "webrtc/base/socket_unittest.h" | 19 #include "webrtc/base/socket_unittest.h" |
| 20 #include "webrtc/base/testutils.h" | 20 #include "webrtc/base/testutils.h" |
| 21 #include "webrtc/base/thread.h" | 21 #include "webrtc/base/thread.h" |
| 22 | 22 |
| 23 namespace rtc { | 23 namespace rtc { |
| 24 | 24 |
| 25 #define MAYBE_SKIP_IPV4 \ |
| 26 if (!HasIPv4Enabled()) { \ |
| 27 LOG(LS_INFO) << "No IPv4... skipping"; \ |
| 28 return; \ |
| 29 } |
| 30 |
| 25 #define MAYBE_SKIP_IPV6 \ | 31 #define MAYBE_SKIP_IPV6 \ |
| 26 if (!HasIPv6Enabled()) { \ | 32 if (!HasIPv6Enabled()) { \ |
| 27 LOG(LS_INFO) << "No IPv6... skipping"; \ | 33 LOG(LS_INFO) << "No IPv6... skipping"; \ |
| 28 return; \ | 34 return; \ |
| 29 } | 35 } |
| 30 | 36 |
| 31 class PhysicalSocketTest; | 37 class PhysicalSocketTest; |
| 32 | 38 |
| 33 class FakeSocketDispatcher : public SocketDispatcher { | 39 class FakeSocketDispatcher : public SocketDispatcher { |
| 34 public: | 40 public: |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 static_cast<FakePhysicalSocketServer*>(socketserver()); | 163 static_cast<FakePhysicalSocketServer*>(socketserver()); |
| 158 if (ss->GetTest()->MaxSendSize() >= 0) { | 164 if (ss->GetTest()->MaxSendSize() >= 0) { |
| 159 len = std::min(len, ss->GetTest()->MaxSendSize()); | 165 len = std::min(len, ss->GetTest()->MaxSendSize()); |
| 160 } | 166 } |
| 161 | 167 |
| 162 return SocketDispatcher::DoSendTo(socket, buf, len, flags, dest_addr, | 168 return SocketDispatcher::DoSendTo(socket, buf, len, flags, dest_addr, |
| 163 addrlen); | 169 addrlen); |
| 164 } | 170 } |
| 165 | 171 |
| 166 TEST_F(PhysicalSocketTest, TestConnectIPv4) { | 172 TEST_F(PhysicalSocketTest, TestConnectIPv4) { |
| 173 MAYBE_SKIP_IPV4; |
| 167 SocketTest::TestConnectIPv4(); | 174 SocketTest::TestConnectIPv4(); |
| 168 } | 175 } |
| 169 | 176 |
| 170 TEST_F(PhysicalSocketTest, TestConnectIPv6) { | 177 TEST_F(PhysicalSocketTest, TestConnectIPv6) { |
| 171 SocketTest::TestConnectIPv6(); | 178 SocketTest::TestConnectIPv6(); |
| 172 } | 179 } |
| 173 | 180 |
| 174 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupIPv4) { | 181 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupIPv4) { |
| 182 MAYBE_SKIP_IPV4; |
| 175 SocketTest::TestConnectWithDnsLookupIPv4(); | 183 SocketTest::TestConnectWithDnsLookupIPv4(); |
| 176 } | 184 } |
| 177 | 185 |
| 178 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupIPv6) { | 186 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupIPv6) { |
| 179 SocketTest::TestConnectWithDnsLookupIPv6(); | 187 SocketTest::TestConnectWithDnsLookupIPv6(); |
| 180 } | 188 } |
| 181 | 189 |
| 182 TEST_F(PhysicalSocketTest, TestConnectFailIPv4) { | 190 TEST_F(PhysicalSocketTest, TestConnectFailIPv4) { |
| 191 MAYBE_SKIP_IPV4; |
| 183 SocketTest::TestConnectFailIPv4(); | 192 SocketTest::TestConnectFailIPv4(); |
| 184 } | 193 } |
| 185 | 194 |
| 186 void PhysicalSocketTest::ConnectInternalAcceptError(const IPAddress& loopback) { | 195 void PhysicalSocketTest::ConnectInternalAcceptError(const IPAddress& loopback) { |
| 187 webrtc::testing::StreamSink sink; | 196 webrtc::testing::StreamSink sink; |
| 188 SocketAddress accept_addr; | 197 SocketAddress accept_addr; |
| 189 | 198 |
| 190 // Create two clients. | 199 // Create two clients. |
| 191 std::unique_ptr<AsyncSocket> client1( | 200 std::unique_ptr<AsyncSocket> client1( |
| 192 server_->CreateAsyncSocket(loopback.family(), SOCK_STREAM)); | 201 server_->CreateAsyncSocket(loopback.family(), SOCK_STREAM)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 EXPECT_TRUE_WAIT((sink.Check(server.get(), webrtc::testing::SSE_READ)), | 260 EXPECT_TRUE_WAIT((sink.Check(server.get(), webrtc::testing::SSE_READ)), |
| 252 kTimeout); | 261 kTimeout); |
| 253 SetFailAccept(false); | 262 SetFailAccept(false); |
| 254 std::unique_ptr<AsyncSocket> accepted2(server->Accept(&accept_addr)); | 263 std::unique_ptr<AsyncSocket> accepted2(server->Accept(&accept_addr)); |
| 255 ASSERT_TRUE(accepted2); | 264 ASSERT_TRUE(accepted2); |
| 256 EXPECT_FALSE(accept_addr.IsNil()); | 265 EXPECT_FALSE(accept_addr.IsNil()); |
| 257 EXPECT_EQ(accepted2->GetRemoteAddress(), accept_addr); | 266 EXPECT_EQ(accepted2->GetRemoteAddress(), accept_addr); |
| 258 } | 267 } |
| 259 | 268 |
| 260 TEST_F(PhysicalSocketTest, TestConnectAcceptErrorIPv4) { | 269 TEST_F(PhysicalSocketTest, TestConnectAcceptErrorIPv4) { |
| 270 MAYBE_SKIP_IPV4; |
| 261 ConnectInternalAcceptError(kIPv4Loopback); | 271 ConnectInternalAcceptError(kIPv4Loopback); |
| 262 } | 272 } |
| 263 | 273 |
| 264 TEST_F(PhysicalSocketTest, TestConnectAcceptErrorIPv6) { | 274 TEST_F(PhysicalSocketTest, TestConnectAcceptErrorIPv6) { |
| 265 MAYBE_SKIP_IPV6; | 275 MAYBE_SKIP_IPV6; |
| 266 ConnectInternalAcceptError(kIPv6Loopback); | 276 ConnectInternalAcceptError(kIPv6Loopback); |
| 267 } | 277 } |
| 268 | 278 |
| 269 void PhysicalSocketTest::WritableAfterPartialWrite(const IPAddress& loopback) { | 279 void PhysicalSocketTest::WritableAfterPartialWrite(const IPAddress& loopback) { |
| 270 // Simulate a really small maximum send size. | 280 // Simulate a really small maximum send size. |
| 271 const int kMaxSendSize = 128; | 281 const int kMaxSendSize = 128; |
| 272 SetMaxSendSize(kMaxSendSize); | 282 SetMaxSendSize(kMaxSendSize); |
| 273 | 283 |
| 274 // Run the default send/receive socket tests with a smaller amount of data | 284 // Run the default send/receive socket tests with a smaller amount of data |
| 275 // to avoid long running times due to the small maximum send size. | 285 // to avoid long running times due to the small maximum send size. |
| 276 const size_t kDataSize = 128 * 1024; | 286 const size_t kDataSize = 128 * 1024; |
| 277 TcpInternal(loopback, kDataSize, kMaxSendSize); | 287 TcpInternal(loopback, kDataSize, kMaxSendSize); |
| 278 } | 288 } |
| 279 | 289 |
| 280 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6167 | 290 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6167 |
| 281 #if defined(WEBRTC_WIN) | 291 #if defined(WEBRTC_WIN) |
| 282 #define MAYBE_TestWritableAfterPartialWriteIPv4 DISABLED_TestWritableAfterPartia
lWriteIPv4 | 292 #define MAYBE_TestWritableAfterPartialWriteIPv4 DISABLED_TestWritableAfterPartia
lWriteIPv4 |
| 283 #else | 293 #else |
| 284 #define MAYBE_TestWritableAfterPartialWriteIPv4 TestWritableAfterPartialWriteIPv
4 | 294 #define MAYBE_TestWritableAfterPartialWriteIPv4 TestWritableAfterPartialWriteIPv
4 |
| 285 #endif | 295 #endif |
| 286 TEST_F(PhysicalSocketTest, MAYBE_TestWritableAfterPartialWriteIPv4) { | 296 TEST_F(PhysicalSocketTest, MAYBE_TestWritableAfterPartialWriteIPv4) { |
| 297 MAYBE_SKIP_IPV4; |
| 287 WritableAfterPartialWrite(kIPv4Loopback); | 298 WritableAfterPartialWrite(kIPv4Loopback); |
| 288 } | 299 } |
| 289 | 300 |
| 290 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6167 | 301 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6167 |
| 291 #if defined(WEBRTC_WIN) | 302 #if defined(WEBRTC_WIN) |
| 292 #define MAYBE_TestWritableAfterPartialWriteIPv6 DISABLED_TestWritableAfterPartia
lWriteIPv6 | 303 #define MAYBE_TestWritableAfterPartialWriteIPv6 DISABLED_TestWritableAfterPartia
lWriteIPv6 |
| 293 #else | 304 #else |
| 294 #define MAYBE_TestWritableAfterPartialWriteIPv6 TestWritableAfterPartialWriteIPv
6 | 305 #define MAYBE_TestWritableAfterPartialWriteIPv6 TestWritableAfterPartialWriteIPv
6 |
| 295 #endif | 306 #endif |
| 296 TEST_F(PhysicalSocketTest, MAYBE_TestWritableAfterPartialWriteIPv6) { | 307 TEST_F(PhysicalSocketTest, MAYBE_TestWritableAfterPartialWriteIPv6) { |
| 297 MAYBE_SKIP_IPV6; | 308 MAYBE_SKIP_IPV6; |
| 298 WritableAfterPartialWrite(kIPv6Loopback); | 309 WritableAfterPartialWrite(kIPv6Loopback); |
| 299 } | 310 } |
| 300 | 311 |
| 301 TEST_F(PhysicalSocketTest, TestConnectFailIPv6) { | 312 TEST_F(PhysicalSocketTest, TestConnectFailIPv6) { |
| 302 SocketTest::TestConnectFailIPv6(); | 313 SocketTest::TestConnectFailIPv6(); |
| 303 } | 314 } |
| 304 | 315 |
| 305 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupFailIPv4) { | 316 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupFailIPv4) { |
| 317 MAYBE_SKIP_IPV4; |
| 306 SocketTest::TestConnectWithDnsLookupFailIPv4(); | 318 SocketTest::TestConnectWithDnsLookupFailIPv4(); |
| 307 } | 319 } |
| 308 | 320 |
| 309 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupFailIPv6) { | 321 TEST_F(PhysicalSocketTest, TestConnectWithDnsLookupFailIPv6) { |
| 310 SocketTest::TestConnectWithDnsLookupFailIPv6(); | 322 SocketTest::TestConnectWithDnsLookupFailIPv6(); |
| 311 } | 323 } |
| 312 | 324 |
| 313 | 325 |
| 314 TEST_F(PhysicalSocketTest, TestConnectWithClosedSocketIPv4) { | 326 TEST_F(PhysicalSocketTest, TestConnectWithClosedSocketIPv4) { |
| 327 MAYBE_SKIP_IPV4; |
| 315 SocketTest::TestConnectWithClosedSocketIPv4(); | 328 SocketTest::TestConnectWithClosedSocketIPv4(); |
| 316 } | 329 } |
| 317 | 330 |
| 318 TEST_F(PhysicalSocketTest, TestConnectWithClosedSocketIPv6) { | 331 TEST_F(PhysicalSocketTest, TestConnectWithClosedSocketIPv6) { |
| 319 SocketTest::TestConnectWithClosedSocketIPv6(); | 332 SocketTest::TestConnectWithClosedSocketIPv6(); |
| 320 } | 333 } |
| 321 | 334 |
| 322 TEST_F(PhysicalSocketTest, TestConnectWhileNotClosedIPv4) { | 335 TEST_F(PhysicalSocketTest, TestConnectWhileNotClosedIPv4) { |
| 336 MAYBE_SKIP_IPV4; |
| 323 SocketTest::TestConnectWhileNotClosedIPv4(); | 337 SocketTest::TestConnectWhileNotClosedIPv4(); |
| 324 } | 338 } |
| 325 | 339 |
| 326 TEST_F(PhysicalSocketTest, TestConnectWhileNotClosedIPv6) { | 340 TEST_F(PhysicalSocketTest, TestConnectWhileNotClosedIPv6) { |
| 327 SocketTest::TestConnectWhileNotClosedIPv6(); | 341 SocketTest::TestConnectWhileNotClosedIPv6(); |
| 328 } | 342 } |
| 329 | 343 |
| 330 TEST_F(PhysicalSocketTest, TestServerCloseDuringConnectIPv4) { | 344 TEST_F(PhysicalSocketTest, TestServerCloseDuringConnectIPv4) { |
| 345 MAYBE_SKIP_IPV4; |
| 331 SocketTest::TestServerCloseDuringConnectIPv4(); | 346 SocketTest::TestServerCloseDuringConnectIPv4(); |
| 332 } | 347 } |
| 333 | 348 |
| 334 TEST_F(PhysicalSocketTest, TestServerCloseDuringConnectIPv6) { | 349 TEST_F(PhysicalSocketTest, TestServerCloseDuringConnectIPv6) { |
| 335 SocketTest::TestServerCloseDuringConnectIPv6(); | 350 SocketTest::TestServerCloseDuringConnectIPv6(); |
| 336 } | 351 } |
| 337 | 352 |
| 338 TEST_F(PhysicalSocketTest, TestClientCloseDuringConnectIPv4) { | 353 TEST_F(PhysicalSocketTest, TestClientCloseDuringConnectIPv4) { |
| 354 MAYBE_SKIP_IPV4; |
| 339 SocketTest::TestClientCloseDuringConnectIPv4(); | 355 SocketTest::TestClientCloseDuringConnectIPv4(); |
| 340 } | 356 } |
| 341 | 357 |
| 342 TEST_F(PhysicalSocketTest, TestClientCloseDuringConnectIPv6) { | 358 TEST_F(PhysicalSocketTest, TestClientCloseDuringConnectIPv6) { |
| 343 SocketTest::TestClientCloseDuringConnectIPv6(); | 359 SocketTest::TestClientCloseDuringConnectIPv6(); |
| 344 } | 360 } |
| 345 | 361 |
| 346 TEST_F(PhysicalSocketTest, TestServerCloseIPv4) { | 362 TEST_F(PhysicalSocketTest, TestServerCloseIPv4) { |
| 363 MAYBE_SKIP_IPV4; |
| 347 SocketTest::TestServerCloseIPv4(); | 364 SocketTest::TestServerCloseIPv4(); |
| 348 } | 365 } |
| 349 | 366 |
| 350 TEST_F(PhysicalSocketTest, TestServerCloseIPv6) { | 367 TEST_F(PhysicalSocketTest, TestServerCloseIPv6) { |
| 351 SocketTest::TestServerCloseIPv6(); | 368 SocketTest::TestServerCloseIPv6(); |
| 352 } | 369 } |
| 353 | 370 |
| 354 TEST_F(PhysicalSocketTest, TestCloseInClosedCallbackIPv4) { | 371 TEST_F(PhysicalSocketTest, TestCloseInClosedCallbackIPv4) { |
| 372 MAYBE_SKIP_IPV4; |
| 355 SocketTest::TestCloseInClosedCallbackIPv4(); | 373 SocketTest::TestCloseInClosedCallbackIPv4(); |
| 356 } | 374 } |
| 357 | 375 |
| 358 TEST_F(PhysicalSocketTest, TestCloseInClosedCallbackIPv6) { | 376 TEST_F(PhysicalSocketTest, TestCloseInClosedCallbackIPv6) { |
| 359 SocketTest::TestCloseInClosedCallbackIPv6(); | 377 SocketTest::TestCloseInClosedCallbackIPv6(); |
| 360 } | 378 } |
| 361 | 379 |
| 362 TEST_F(PhysicalSocketTest, TestSocketServerWaitIPv4) { | 380 TEST_F(PhysicalSocketTest, TestSocketServerWaitIPv4) { |
| 381 MAYBE_SKIP_IPV4; |
| 363 SocketTest::TestSocketServerWaitIPv4(); | 382 SocketTest::TestSocketServerWaitIPv4(); |
| 364 } | 383 } |
| 365 | 384 |
| 366 TEST_F(PhysicalSocketTest, TestSocketServerWaitIPv6) { | 385 TEST_F(PhysicalSocketTest, TestSocketServerWaitIPv6) { |
| 367 SocketTest::TestSocketServerWaitIPv6(); | 386 SocketTest::TestSocketServerWaitIPv6(); |
| 368 } | 387 } |
| 369 | 388 |
| 370 TEST_F(PhysicalSocketTest, TestTcpIPv4) { | 389 TEST_F(PhysicalSocketTest, TestTcpIPv4) { |
| 390 MAYBE_SKIP_IPV4; |
| 371 SocketTest::TestTcpIPv4(); | 391 SocketTest::TestTcpIPv4(); |
| 372 } | 392 } |
| 373 | 393 |
| 374 TEST_F(PhysicalSocketTest, TestTcpIPv6) { | 394 TEST_F(PhysicalSocketTest, TestTcpIPv6) { |
| 375 SocketTest::TestTcpIPv6(); | 395 SocketTest::TestTcpIPv6(); |
| 376 } | 396 } |
| 377 | 397 |
| 378 TEST_F(PhysicalSocketTest, TestUdpIPv4) { | 398 TEST_F(PhysicalSocketTest, TestUdpIPv4) { |
| 399 MAYBE_SKIP_IPV4; |
| 379 SocketTest::TestUdpIPv4(); | 400 SocketTest::TestUdpIPv4(); |
| 380 } | 401 } |
| 381 | 402 |
| 382 TEST_F(PhysicalSocketTest, TestUdpIPv6) { | 403 TEST_F(PhysicalSocketTest, TestUdpIPv6) { |
| 383 SocketTest::TestUdpIPv6(); | 404 SocketTest::TestUdpIPv6(); |
| 384 } | 405 } |
| 385 | 406 |
| 386 // Disable for TSan v2, see | 407 // Disable for TSan v2, see |
| 387 // https://code.google.com/p/webrtc/issues/detail?id=3498 for details. | 408 // https://code.google.com/p/webrtc/issues/detail?id=3498 for details. |
| 388 // Also disable for MSan, see: | 409 // Also disable for MSan, see: |
| 389 // https://code.google.com/p/webrtc/issues/detail?id=4958 | 410 // https://code.google.com/p/webrtc/issues/detail?id=4958 |
| 390 // TODO(deadbeef): Enable again once test is reimplemented to be unflaky. | 411 // TODO(deadbeef): Enable again once test is reimplemented to be unflaky. |
| 391 // Also disable for ASan. | 412 // Also disable for ASan. |
| 392 // Disabled on Android: https://code.google.com/p/webrtc/issues/detail?id=4364 | 413 // Disabled on Android: https://code.google.com/p/webrtc/issues/detail?id=4364 |
| 393 // Disabled on Linux: https://bugs.chromium.org/p/webrtc/issues/detail?id=5233 | 414 // Disabled on Linux: https://bugs.chromium.org/p/webrtc/issues/detail?id=5233 |
| 394 #if defined(THREAD_SANITIZER) || defined(MEMORY_SANITIZER) || \ | 415 #if defined(THREAD_SANITIZER) || defined(MEMORY_SANITIZER) || \ |
| 395 defined(ADDRESS_SANITIZER) || defined(WEBRTC_ANDROID) || \ | 416 defined(ADDRESS_SANITIZER) || defined(WEBRTC_ANDROID) || \ |
| 396 defined(WEBRTC_LINUX) | 417 defined(WEBRTC_LINUX) |
| 397 #define MAYBE_TestUdpReadyToSendIPv4 DISABLED_TestUdpReadyToSendIPv4 | 418 #define MAYBE_TestUdpReadyToSendIPv4 DISABLED_TestUdpReadyToSendIPv4 |
| 398 #else | 419 #else |
| 399 #define MAYBE_TestUdpReadyToSendIPv4 TestUdpReadyToSendIPv4 | 420 #define MAYBE_TestUdpReadyToSendIPv4 TestUdpReadyToSendIPv4 |
| 400 #endif | 421 #endif |
| 401 TEST_F(PhysicalSocketTest, MAYBE_TestUdpReadyToSendIPv4) { | 422 TEST_F(PhysicalSocketTest, MAYBE_TestUdpReadyToSendIPv4) { |
| 423 MAYBE_SKIP_IPV4; |
| 402 SocketTest::TestUdpReadyToSendIPv4(); | 424 SocketTest::TestUdpReadyToSendIPv4(); |
| 403 } | 425 } |
| 404 | 426 |
| 405 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6167 | 427 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6167 |
| 406 #if defined(WEBRTC_WIN) | 428 #if defined(WEBRTC_WIN) |
| 407 #define MAYBE_TestUdpReadyToSendIPv6 DISABLED_TestUdpReadyToSendIPv6 | 429 #define MAYBE_TestUdpReadyToSendIPv6 DISABLED_TestUdpReadyToSendIPv6 |
| 408 #else | 430 #else |
| 409 #define MAYBE_TestUdpReadyToSendIPv6 TestUdpReadyToSendIPv6 | 431 #define MAYBE_TestUdpReadyToSendIPv6 TestUdpReadyToSendIPv6 |
| 410 #endif | 432 #endif |
| 411 TEST_F(PhysicalSocketTest, MAYBE_TestUdpReadyToSendIPv6) { | 433 TEST_F(PhysicalSocketTest, MAYBE_TestUdpReadyToSendIPv6) { |
| 412 SocketTest::TestUdpReadyToSendIPv6(); | 434 SocketTest::TestUdpReadyToSendIPv6(); |
| 413 } | 435 } |
| 414 | 436 |
| 415 TEST_F(PhysicalSocketTest, TestGetSetOptionsIPv4) { | 437 TEST_F(PhysicalSocketTest, TestGetSetOptionsIPv4) { |
| 438 MAYBE_SKIP_IPV4; |
| 416 SocketTest::TestGetSetOptionsIPv4(); | 439 SocketTest::TestGetSetOptionsIPv4(); |
| 417 } | 440 } |
| 418 | 441 |
| 419 TEST_F(PhysicalSocketTest, TestGetSetOptionsIPv6) { | 442 TEST_F(PhysicalSocketTest, TestGetSetOptionsIPv6) { |
| 420 SocketTest::TestGetSetOptionsIPv6(); | 443 SocketTest::TestGetSetOptionsIPv6(); |
| 421 } | 444 } |
| 422 | 445 |
| 423 #if defined(WEBRTC_POSIX) | 446 #if defined(WEBRTC_POSIX) |
| 424 | 447 |
| 425 // We don't get recv timestamps on Mac. | 448 // We don't get recv timestamps on Mac. |
| 426 #if !defined(WEBRTC_MAC) | 449 #if !defined(WEBRTC_MAC) |
| 427 TEST_F(PhysicalSocketTest, TestSocketRecvTimestampIPv4) { | 450 TEST_F(PhysicalSocketTest, TestSocketRecvTimestampIPv4) { |
| 451 MAYBE_SKIP_IPV4; |
| 428 SocketTest::TestSocketRecvTimestampIPv4(); | 452 SocketTest::TestSocketRecvTimestampIPv4(); |
| 429 } | 453 } |
| 430 | 454 |
| 431 TEST_F(PhysicalSocketTest, TestSocketRecvTimestampIPv6) { | 455 TEST_F(PhysicalSocketTest, TestSocketRecvTimestampIPv6) { |
| 432 SocketTest::TestSocketRecvTimestampIPv6(); | 456 SocketTest::TestSocketRecvTimestampIPv6(); |
| 433 } | 457 } |
| 434 #endif | 458 #endif |
| 435 | 459 |
| 436 // Verify that if the socket was unable to be bound to a real network interface | 460 // Verify that if the socket was unable to be bound to a real network interface |
| 437 // (not loopback), Bind will return an error. | 461 // (not loopback), Bind will return an error. |
| 438 TEST_F(PhysicalSocketTest, | 462 TEST_F(PhysicalSocketTest, |
| 439 BindFailsIfNetworkBinderFailsForNonLoopbackInterface) { | 463 BindFailsIfNetworkBinderFailsForNonLoopbackInterface) { |
| 464 MAYBE_SKIP_IPV4; |
| 440 FakeNetworkBinder fake_network_binder; | 465 FakeNetworkBinder fake_network_binder; |
| 441 server_->set_network_binder(&fake_network_binder); | 466 server_->set_network_binder(&fake_network_binder); |
| 442 std::unique_ptr<AsyncSocket> socket( | 467 std::unique_ptr<AsyncSocket> socket( |
| 443 server_->CreateAsyncSocket(AF_INET, SOCK_DGRAM)); | 468 server_->CreateAsyncSocket(AF_INET, SOCK_DGRAM)); |
| 444 fake_network_binder.set_result(NetworkBindingResult::FAILURE); | 469 fake_network_binder.set_result(NetworkBindingResult::FAILURE); |
| 445 EXPECT_EQ(-1, socket->Bind(SocketAddress("192.168.0.1", 0))); | 470 EXPECT_EQ(-1, socket->Bind(SocketAddress("192.168.0.1", 0))); |
| 446 server_->set_network_binder(nullptr); | 471 server_->set_network_binder(nullptr); |
| 447 } | 472 } |
| 448 | 473 |
| 449 // Network binder shouldn't be used if the socket is bound to the "any" IP. | 474 // Network binder shouldn't be used if the socket is bound to the "any" IP. |
| 450 TEST_F(PhysicalSocketTest, | 475 TEST_F(PhysicalSocketTest, |
| 451 NetworkBinderIsNotUsedForAnyIp) { | 476 NetworkBinderIsNotUsedForAnyIp) { |
| 477 MAYBE_SKIP_IPV4; |
| 452 FakeNetworkBinder fake_network_binder; | 478 FakeNetworkBinder fake_network_binder; |
| 453 server_->set_network_binder(&fake_network_binder); | 479 server_->set_network_binder(&fake_network_binder); |
| 454 std::unique_ptr<AsyncSocket> socket( | 480 std::unique_ptr<AsyncSocket> socket( |
| 455 server_->CreateAsyncSocket(AF_INET, SOCK_DGRAM)); | 481 server_->CreateAsyncSocket(AF_INET, SOCK_DGRAM)); |
| 456 EXPECT_EQ(0, socket->Bind(SocketAddress("0.0.0.0", 0))); | 482 EXPECT_EQ(0, socket->Bind(SocketAddress("0.0.0.0", 0))); |
| 457 EXPECT_EQ(0, fake_network_binder.num_binds()); | 483 EXPECT_EQ(0, fake_network_binder.num_binds()); |
| 458 server_->set_network_binder(nullptr); | 484 server_->set_network_binder(nullptr); |
| 459 } | 485 } |
| 460 | 486 |
| 461 // For a loopback interface, failures to bind to the interface should be | 487 // For a loopback interface, failures to bind to the interface should be |
| 462 // tolerated. | 488 // tolerated. |
| 463 TEST_F(PhysicalSocketTest, | 489 TEST_F(PhysicalSocketTest, |
| 464 BindSucceedsIfNetworkBinderFailsForLoopbackInterface) { | 490 BindSucceedsIfNetworkBinderFailsForLoopbackInterface) { |
| 491 MAYBE_SKIP_IPV4; |
| 465 FakeNetworkBinder fake_network_binder; | 492 FakeNetworkBinder fake_network_binder; |
| 466 server_->set_network_binder(&fake_network_binder); | 493 server_->set_network_binder(&fake_network_binder); |
| 467 std::unique_ptr<AsyncSocket> socket( | 494 std::unique_ptr<AsyncSocket> socket( |
| 468 server_->CreateAsyncSocket(AF_INET, SOCK_DGRAM)); | 495 server_->CreateAsyncSocket(AF_INET, SOCK_DGRAM)); |
| 469 fake_network_binder.set_result(NetworkBindingResult::FAILURE); | 496 fake_network_binder.set_result(NetworkBindingResult::FAILURE); |
| 470 EXPECT_EQ(0, socket->Bind(SocketAddress(kIPv4Loopback, 0))); | 497 EXPECT_EQ(0, socket->Bind(SocketAddress(kIPv4Loopback, 0))); |
| 471 server_->set_network_binder(nullptr); | 498 server_->set_network_binder(nullptr); |
| 472 } | 499 } |
| 473 | 500 |
| 474 class PosixSignalDeliveryTest : public testing::Test { | 501 class PosixSignalDeliveryTest : public testing::Test { |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 thread->Start(runnable.get()); | 615 thread->Start(runnable.get()); |
| 589 EXPECT_TRUE(ss_->Wait(1500, true)); | 616 EXPECT_TRUE(ss_->Wait(1500, true)); |
| 590 EXPECT_TRUE(ExpectSignal(SIGTERM)); | 617 EXPECT_TRUE(ExpectSignal(SIGTERM)); |
| 591 EXPECT_EQ(Thread::Current(), signaled_thread_); | 618 EXPECT_EQ(Thread::Current(), signaled_thread_); |
| 592 EXPECT_TRUE(ExpectNone()); | 619 EXPECT_TRUE(ExpectNone()); |
| 593 } | 620 } |
| 594 | 621 |
| 595 #endif | 622 #endif |
| 596 | 623 |
| 597 } // namespace rtc | 624 } // namespace rtc |
| OLD | NEW |