tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit a6eb82f85a4a67f15e8b5d108586c4bb5a41f5dc
parent 68822426fedbea01b315db20808d973a126a7c36
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon,  1 Dec 2025 21:13:57 -0700

Bug 2000941 - Vendor libwebrtc from c62fdaa2da

Upstream commit: https://webrtc.googlesource.com/src/+/c62fdaa2dae5f0885a09b406e3dd80863ddb0875
    Provide Environment for AsyncUDPSocket in rtc_base unittests

    Cleanup nearby code:
     use SocketServer::Create instead of SocketServer::CreateSocket to get
     unique_ptr directly
    Save AsyncUDPSocket using unique_ptr instead of raw pointer
    Unwrap TestClient from unique_ptr where unique_ptr is not moved

    Bug: webrtc:42223992
    Change-Id: I3dc41bcac369e50d332e46e278eb55ab644758d5
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/409548
    Reviewed-by: Harald Alvestrand <hta@webrtc.org>
    Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45664}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/moz-patch-stack/s0001.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0027.patch | 4++--
Mthird_party/libwebrtc/moz-patch-stack/s0053.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0091.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0094.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0102.patch | 2+-
Mthird_party/libwebrtc/moz-patch-stack/s0107.patch | 2+-
Mthird_party/libwebrtc/rtc_base/BUILD.gn | 4++++
Mthird_party/libwebrtc/rtc_base/socket_unittest.cc | 203+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mthird_party/libwebrtc/rtc_base/socket_unittest.h | 11++++-------
Mthird_party/libwebrtc/rtc_base/thread_unittest.cc | 16+++++++++-------
Mthird_party/libwebrtc/rtc_base/virtual_socket_unittest.cc | 213++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
13 files changed, 251 insertions(+), 216 deletions(-)

diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor @@ -1,4 +1,4 @@ # ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T04:11:22.195589+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T04:13:43.134333+00:00. # base of lastest vendoring -54c4cab4f5 +c62fdaa2da diff --git a/third_party/libwebrtc/moz-patch-stack/s0001.patch b/third_party/libwebrtc/moz-patch-stack/s0001.patch @@ -1392,7 +1392,7 @@ index 5ccc3d7d38..cd957416bc 100644 const bool enable_svc_for_simulcast_; std::optional<SimulcastToSvcConverter> simulcast_to_svc_converter_; diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index db13e5a411..324a40843d 100644 +index ce7896bbed..668b55b766 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -449,6 +449,12 @@ rtc_library("logging") { diff --git a/third_party/libwebrtc/moz-patch-stack/s0027.patch b/third_party/libwebrtc/moz-patch-stack/s0027.patch @@ -1008,7 +1008,7 @@ index 39aa39a41c..b26e30e8bb 100644 "/config/external/nspr", "/nsprpub/lib/ds", diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 324a40843d..c629c55a07 100644 +index 668b55b766..fa927c25d9 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -326,6 +326,7 @@ rtc_library("sample_counter") { @@ -1176,7 +1176,7 @@ index 324a40843d..c629c55a07 100644 rtc_library("ssl_adapter") { visibility = [ "*" ] -@@ -2382,7 +2406,7 @@ if (rtc_include_tests) { +@@ -2386,7 +2410,7 @@ if (rtc_include_tests) { } } diff --git a/third_party/libwebrtc/moz-patch-stack/s0053.patch b/third_party/libwebrtc/moz-patch-stack/s0053.patch @@ -29,7 +29,7 @@ index 7db75d5fd3..d0feb5007c 100644 rtc_library("task_queue_test") { visibility = [ "*" ] diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index c629c55a07..03f57cf419 100644 +index fa927c25d9..7bca814660 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -664,10 +664,14 @@ if (is_mac || is_ios) { diff --git a/third_party/libwebrtc/moz-patch-stack/s0091.patch b/third_party/libwebrtc/moz-patch-stack/s0091.patch @@ -13,7 +13,7 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/4e7b3c485e549e7e3 1 file changed, 6 insertions(+) diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 03f57cf419..180a0656f1 100644 +index 7bca814660..d640c9ddc3 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -992,6 +992,12 @@ rtc_library("threading") { diff --git a/third_party/libwebrtc/moz-patch-stack/s0094.patch b/third_party/libwebrtc/moz-patch-stack/s0094.patch @@ -9,7 +9,7 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/ee2f06666bcc6d22c 1 file changed, 2 insertions(+) diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 180a0656f1..3ce3e5d941 100644 +index d640c9ddc3..f7a8428d3f 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -1690,6 +1690,7 @@ if (!build_with_mozilla) { diff --git a/third_party/libwebrtc/moz-patch-stack/s0102.patch b/third_party/libwebrtc/moz-patch-stack/s0102.patch @@ -616,7 +616,7 @@ index 4c837bb838..96fbcc9539 100644 if (rtc_build_libsrtp) { diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 3ce3e5d941..f53d995584 100644 +index f7a8428d3f..408573e6a7 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -9,8 +9,8 @@ diff --git a/third_party/libwebrtc/moz-patch-stack/s0107.patch b/third_party/libwebrtc/moz-patch-stack/s0107.patch @@ -116,7 +116,7 @@ index ecbb7eae7e..a13fe19324 100644 public_configs = [] if (!build_with_chromium) { diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index f53d995584..978e369668 100644 +index 408573e6a7..2f064aaf3a 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -1569,6 +1569,7 @@ rtc_source_set("ssl_header") { diff --git a/third_party/libwebrtc/rtc_base/BUILD.gn b/third_party/libwebrtc/rtc_base/BUILD.gn @@ -2067,10 +2067,12 @@ if (rtc_include_tests) { ":threading", ":timeutils", "../api:rtc_error_matchers", + "../api/environment", "../api/transport:ecn_marking", "../api/units:time_delta", "../api/units:timestamp", "../system_wrappers", + "../test:create_test_environment", "../test:fileutils", "../test:test_main", "../test:test_support", @@ -2189,6 +2191,7 @@ if (rtc_include_tests) { "../api:make_ref_counted", "../api:ref_count", "../api:scoped_refptr", + "../api/environment", "../api/numerics", "../api/units:data_rate", "../api/units:data_size", @@ -2196,6 +2199,7 @@ if (rtc_include_tests) { "../api/units:time_delta", "../api/units:timestamp", "../system_wrappers", + "../test:create_test_environment", "../test:fileutils", "../test:test_main", "../test:test_support", diff --git a/third_party/libwebrtc/rtc_base/socket_unittest.cc b/third_party/libwebrtc/rtc_base/socket_unittest.cc @@ -18,24 +18,25 @@ #include <string> #include <utility> -#include "absl/memory/memory.h" #include "absl/strings/string_view.h" #include "api/test/rtc_error_matchers.h" #include "api/transport/ecn_marking.h" +#include "api/units/time_delta.h" #include "rtc_base/async_udp_socket.h" #include "rtc_base/buffer.h" -#include "rtc_base/gunit.h" #include "rtc_base/ip_address.h" #include "rtc_base/logging.h" #include "rtc_base/net_helpers.h" #include "rtc_base/net_test_helpers.h" #include "rtc_base/socket_address.h" +#include "rtc_base/socket_factory.h" #include "rtc_base/socket_server.h" #include "rtc_base/socket_unittest.h" #include "rtc_base/test_client.h" #include "rtc_base/test_utils.h" #include "rtc_base/third_party/sigslot/sigslot.h" #include "rtc_base/thread.h" +#include "test/create_test_environment.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/wait_until.h" @@ -48,6 +49,10 @@ namespace webrtc { +MATCHER_P2(Near, expected, max_error, "") { + return expected - max_error < arg && arg < expected + max_error; +} + using testing::SSE_CLOSE; using testing::SSE_ERROR; using testing::SSE_OPEN; @@ -58,6 +63,12 @@ using testing::StreamSink; // Data size to be used in TcpInternal tests. static const size_t kTcpInternalDataSize = 1024 * 1024; // bytes +SocketTest::SocketTest(SocketFactory* socket_factory) + : kIPv4Loopback(INADDR_LOOPBACK), + kIPv6Loopback(in6addr_loopback), + env_(CreateTestEnvironment()), + socket_factory_(socket_factory) {} + void SocketTest::TestConnectIPv4() { ConnectInternal(kIPv4Loopback); } @@ -260,15 +271,15 @@ void SocketTest::ConnectInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); EXPECT_EQ(Socket::CS_CLOSED, client->GetState()); EXPECT_TRUE(IsUnspecOrEmptyIP(client->GetLocalAddress().ipaddr())); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -319,13 +330,13 @@ void SocketTest::ConnectWithDnsLookupInternal(const IPAddress& loopback, SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -371,13 +382,13 @@ void SocketTest::ConnectFailInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server, but don't listen yet. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); @@ -406,13 +417,13 @@ void SocketTest::ConnectWithDnsLookupFailInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server, but don't listen yet. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); @@ -445,14 +456,14 @@ void SocketTest::ConnectWithDnsLookupFailInternal(const IPAddress& loopback) { void SocketTest::ConnectWithClosedSocketInternal(const IPAddress& loopback) { // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); // Create a client and put in to CS_CLOSED state. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); EXPECT_EQ(0, client->Close()); EXPECT_EQ(Socket::CS_CLOSED, client->GetState()); @@ -464,14 +475,14 @@ void SocketTest::ConnectWithClosedSocketInternal(const IPAddress& loopback) { void SocketTest::ConnectWhileNotClosedInternal(const IPAddress& loopback) { // Create server and listen. StreamSink sink; - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); // Create client, connect. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); EXPECT_EQ(0, client->Connect(SocketAddress(server->GetLocalAddress()))); EXPECT_EQ(Socket::CS_CONNECTING, client->GetState()); // Try to connect again. Should fail, but not interfere with original attempt. @@ -511,13 +522,13 @@ void SocketTest::ServerCloseDuringConnectInternal(const IPAddress& loopback) { StreamSink sink; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -544,13 +555,13 @@ void SocketTest::ClientCloseDuringConnectInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -586,13 +597,13 @@ void SocketTest::ServerCloseInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -668,14 +679,14 @@ void SocketTest::CloseInClosedCallbackInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); client->SignalCloseEvent.connect(&closer, &SocketCloser::OnClose); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -733,10 +744,10 @@ class SocketDeleter : public sigslot::has_slots<> { // iteration of the select loop failed in this situation, if both sockets // became readable at the same time. void SocketTest::DeleteInReadCallbackInternal(const IPAddress& loopback) { - std::unique_ptr<Socket> socket1( - socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM)); - std::unique_ptr<Socket> socket2( - socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM)); + std::unique_ptr<Socket> socket1 = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket2 = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); EXPECT_EQ(0, socket1->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, socket2->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(3, socket1->SendTo("foo", 3, socket1->GetLocalAddress())); @@ -757,10 +768,10 @@ void SocketTest::SocketServerWaitInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create & connect server and client sockets. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); @@ -813,13 +824,13 @@ void SocketTest::TcpInternal(const IPAddress& loopback, SocketAddress accept_addr; // Create receiving client. - std::unique_ptr<Socket> receiver( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> receiver = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(receiver.get()); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -950,13 +961,13 @@ void SocketTest::SingleFlowControlCallbackInternal(const IPAddress& loopback) { SocketAddress accept_addr; // Create client. - std::unique_ptr<Socket> client( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server and listen. - std::unique_ptr<Socket> server( - socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + socket_factory_->Create(loopback.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); EXPECT_EQ(0, server->Listen(5)); @@ -1027,7 +1038,8 @@ void SocketTest::SingleFlowControlCallbackInternal(const IPAddress& loopback) { void SocketTest::UdpInternal(const IPAddress& loopback) { SocketAddress empty = EmptySocketAddressWithFamily(loopback.family()); // Test basic bind and connect behavior. - Socket* socket = socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); EXPECT_EQ(Socket::CS_CLOSED, socket->GetState()); EXPECT_EQ(0, socket->Bind(SocketAddress(loopback, 0))); SocketAddress addr1 = socket->GetLocalAddress(); @@ -1035,13 +1047,13 @@ void SocketTest::UdpInternal(const IPAddress& loopback) { EXPECT_EQ(Socket::CS_CONNECTED, socket->GetState()); socket->Close(); EXPECT_EQ(Socket::CS_CLOSED, socket->GetState()); - delete socket; + socket = nullptr; // Test send/receive behavior. auto client1 = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(socket_factory_, addr1))); + AsyncUDPSocket::Create(env_, addr1, *socket_factory_)); auto client2 = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(socket_factory_, empty))); + AsyncUDPSocket::Create(env_, empty, *socket_factory_)); SocketAddress addr2; EXPECT_EQ(3, client2->SendTo("foo", 3, addr1)); @@ -1054,7 +1066,7 @@ void SocketTest::UdpInternal(const IPAddress& loopback) { // TODO: figure out what the intent is here for (int i = 0; i < 10; ++i) { client2 = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(socket_factory_, empty))); + AsyncUDPSocket::Create(env_, empty, *socket_factory_)); SocketAddress addr4; EXPECT_EQ(3, client2->SendTo("foo", 3, addr1)); @@ -1080,8 +1092,7 @@ void SocketTest::UdpReadyToSend(const IPAddress& loopback) { SocketAddress test_addr(dest, 2345); // Test send - auto client = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(socket_factory_, empty))); + TestClient client(AsyncUDPSocket::Create(env_, empty, *socket_factory_)); int test_packet_size = 1200; std::unique_ptr<char[]> test_packet(new char[test_packet_size]); // Init the test packet just to avoid memcheck warning. @@ -1092,17 +1103,17 @@ void SocketTest::UdpReadyToSend(const IPAddress& loopback) { #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) send_buffer_size /= 2; #endif - client->SetOption(Socket::OPT_SNDBUF, send_buffer_size); + client.SetOption(Socket::OPT_SNDBUF, send_buffer_size); int error = 0; - uint32_t start_ms = clock_.TimeInMilliseconds(); + uint32_t start_ms = env_.clock().TimeInMilliseconds(); int sent_packet_num = 0; int expected_error = EWOULDBLOCK; - while (start_ms + 5000 > clock_.TimeInMilliseconds()) { - int ret = client->SendTo(test_packet.get(), test_packet_size, test_addr); + while (start_ms + 5000 > env_.clock().TimeInMilliseconds()) { + int ret = client.SendTo(test_packet.get(), test_packet_size, test_addr); ++sent_packet_num; if (ret != test_packet_size) { - error = client->GetError(); + error = client.GetError(); if (error == expected_error) { RTC_LOG(LS_INFO) << "Got expected error code after sending " << sent_packet_num << " packets."; @@ -1111,16 +1122,14 @@ void SocketTest::UdpReadyToSend(const IPAddress& loopback) { } } EXPECT_EQ(expected_error, error); - EXPECT_FALSE(client->ready_to_send()); - EXPECT_THAT( - WaitUntil([&] { return client->ready_to_send(); }, ::testing::IsTrue()), - IsRtcOk()); + EXPECT_FALSE(client.ready_to_send()); + EXPECT_TRUE(WaitUntil([&] { return client.ready_to_send(); })); RTC_LOG(LS_INFO) << "Got SignalReadyToSend"; } void SocketTest::GetSetOptionsInternal(const IPAddress& loopback) { - std::unique_ptr<Socket> socket( - socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM)); + std::unique_ptr<Socket> socket = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); socket->Bind(SocketAddress(loopback, 0)); // Check SNDBUF/RCVBUF. @@ -1173,7 +1182,7 @@ void SocketTest::GetSetOptionsInternal(const IPAddress& loopback) { #endif // Prepare on TCP specific options. - socket.reset(socket_factory_->CreateSocket(loopback.family(), SOCK_STREAM)); + socket = socket_factory_->Create(loopback.family(), SOCK_STREAM); socket->Bind(SocketAddress(loopback, 0)); // Check that we can set NODELAY on a TCP socket. @@ -1213,13 +1222,13 @@ void SocketTest::GetSetOptionsInternal(const IPAddress& loopback) { void SocketTest::SocketRecvTimestamp(const IPAddress& loopback) { StreamSink sink; - std::unique_ptr<Socket> socket( - socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM)); + std::unique_ptr<Socket> socket = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); EXPECT_EQ(0, socket->Bind(SocketAddress(loopback, 0))); SocketAddress address = socket->GetLocalAddress(); sink.Monitor(socket.get()); - int64_t send_time_1 = clock_.TimeInMicroseconds(); + int64_t send_time_1 = env_.clock().TimeInMicroseconds(); socket->SendTo("foo", 3, address); // Wait until data is available. @@ -1233,7 +1242,7 @@ void SocketTest::SocketRecvTimestamp(const IPAddress& loopback) { const int64_t kTimeBetweenPacketsMs = 100; Thread::SleepMs(kTimeBetweenPacketsMs); - int64_t send_time_2 = clock_.TimeInMicroseconds(); + int64_t send_time_2 = env_.clock().TimeInMicroseconds(); socket->SendTo("bar", 3, address); // Wait until data is available. EXPECT_THAT(WaitUntil([&] { return sink.Check(socket.get(), SSE_READ); }, @@ -1252,37 +1261,35 @@ void SocketTest::SocketRecvTimestamp(const IPAddress& loopback) { void SocketTest::UdpSocketRecvTimestampUseRtcEpoch(const IPAddress& loopback) { SocketAddress empty = EmptySocketAddressWithFamily(loopback.family()); - std::unique_ptr<Socket> socket( - socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM)); + std::unique_ptr<Socket> socket = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); ASSERT_EQ(socket->Bind(SocketAddress(loopback, 0)), 0); SocketAddress address = socket->GetLocalAddress(); socket = nullptr; - auto client1 = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(socket_factory_, address))); - auto client2 = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(socket_factory_, empty))); + TestClient client1(AsyncUDPSocket::Create(env_, address, *socket_factory_)); + TestClient client2(AsyncUDPSocket::Create(env_, empty, *socket_factory_)); SocketAddress addr2; - client2->SendTo("foo", 3, address); - std::unique_ptr<TestClient::Packet> packet_1 = client1->NextPacket(10000); + client2.SendTo("foo", 3, address); + std::unique_ptr<TestClient::Packet> packet_1 = client1.NextPacket(10000); ASSERT_TRUE(packet_1 != nullptr); - EXPECT_NEAR(packet_1->packet_time->us(), clock_.TimeInMicroseconds(), - 1000'000); + EXPECT_THAT(packet_1->packet_time, + Near(env_.clock().CurrentTime(), TimeDelta::Seconds(1))); Thread::SleepMs(100); - client2->SendTo("bar", 3, address); - std::unique_ptr<TestClient::Packet> packet_2 = client1->NextPacket(10000); + client2.SendTo("bar", 3, address); + std::unique_ptr<TestClient::Packet> packet_2 = client1.NextPacket(10000); ASSERT_TRUE(packet_2 != nullptr); - EXPECT_GT(packet_2->packet_time->us(), packet_1->packet_time->us()); - EXPECT_NEAR(packet_2->packet_time->us(), clock_.TimeInMicroseconds(), - 1000'000); + EXPECT_GT(packet_2->packet_time, packet_1->packet_time); + EXPECT_THAT(packet_2->packet_time, + Near(env_.clock().CurrentTime(), TimeDelta::Seconds(1))); } void SocketTest::SocketSendRecvWithEcn(const IPAddress& loopback) { StreamSink sink; - std::unique_ptr<Socket> socket( - socket_factory_->CreateSocket(loopback.family(), SOCK_DGRAM)); + std::unique_ptr<Socket> socket = + socket_factory_->Create(loopback.family(), SOCK_DGRAM); EXPECT_EQ(0, socket->Bind(SocketAddress(loopback, 0))); SocketAddress address = socket->GetLocalAddress(); sink.Monitor(socket.get()); diff --git a/third_party/libwebrtc/rtc_base/socket_unittest.h b/third_party/libwebrtc/rtc_base/socket_unittest.h @@ -14,9 +14,9 @@ #include <cstddef> #include "absl/strings/string_view.h" +#include "api/environment/environment.h" #include "rtc_base/ip_address.h" #include "rtc_base/socket_factory.h" -#include "system_wrappers/include/clock.h" #include "test/gtest.h" namespace webrtc { @@ -26,11 +26,8 @@ namespace webrtc { // socketserver, and call the SocketTest test methods. class SocketTest : public ::testing::Test { protected: - explicit SocketTest(SocketFactory* socket_factory) - : kIPv4Loopback(INADDR_LOOPBACK), - kIPv6Loopback(in6addr_loopback), - clock_(*Clock::GetRealTimeClock()), - socket_factory_(socket_factory) {} + explicit SocketTest(SocketFactory* socket_factory); + void TestConnectIPv4(); void TestConnectIPv6(); void TestConnectWithDnsLookupIPv4(); @@ -79,7 +76,6 @@ class SocketTest : public ::testing::Test { void TcpInternal(const IPAddress& loopback, size_t data_size, ptrdiff_t max_send_size); - Clock& clock_; private: void ConnectInternal(const IPAddress& loopback); @@ -104,6 +100,7 @@ class SocketTest : public ::testing::Test { void UdpSocketRecvTimestampUseRtcEpoch(const IPAddress& loopback); void SocketSendRecvWithEcn(const IPAddress& loopback); + const Environment env_; SocketFactory* socket_factory_; }; diff --git a/third_party/libwebrtc/rtc_base/thread_unittest.cc b/third_party/libwebrtc/rtc_base/thread_unittest.cc @@ -34,10 +34,12 @@ #include "rtc_base/null_socket_server.h" #include "rtc_base/socket.h" #include "rtc_base/socket_address.h" +#include "rtc_base/socket_factory.h" #include "rtc_base/socket_server.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/thread_annotations.h" #include "rtc_base/time_utils.h" +#include "test/create_test_environment.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/testsupport/rtc_expect_death.h" @@ -88,11 +90,13 @@ class MessageClient : public TestGenerator { // Receives on a socket and sends by posting messages. class SocketClient : public TestGenerator { public: - SocketClient(Socket* socket, + SocketClient(SocketFactory* socket_factory, const SocketAddress& addr, Thread* post_thread, MessageClient* phandler) - : socket_(AsyncUDPSocket::Create(socket, addr)), + : socket_(AsyncUDPSocket::Create(CreateTestEnvironment(), + addr, + *socket_factory)), post_thread_(post_thread), post_handler_(phandler) { socket_->RegisterReceivedPacketCallback( @@ -101,7 +105,7 @@ class SocketClient : public TestGenerator { }); } - ~SocketClient() { delete socket_; } + ~SocketClient() = default; SocketAddress address() const { return socket_->GetLocalAddress(); } @@ -117,7 +121,7 @@ class SocketClient : public TestGenerator { } private: - AsyncUDPSocket* socket_; + std::unique_ptr<AsyncUDPSocket> socket_; Thread* post_thread_; MessageClient* post_handler_; }; @@ -166,9 +170,7 @@ TEST(ThreadTest, DISABLED_Main) { // Create the socket client on its own thread. auto th2 = Thread::CreateWithSocketServer(); - Socket* asocket = - th2->socketserver()->CreateSocket(addr.family(), SOCK_DGRAM); - SocketClient sock_client(asocket, addr, th1.get(), &msg_client); + SocketClient sock_client(th2->socketserver(), addr, th1.get(), &msg_client); socket->Connect(sock_client.address()); diff --git a/third_party/libwebrtc/rtc_base/virtual_socket_unittest.cc b/third_party/libwebrtc/rtc_base/virtual_socket_unittest.cc @@ -15,8 +15,10 @@ #include <cstring> #include <ctime> #include <memory> +#include <utility> #include "absl/memory/memory.h" +#include "api/environment/environment.h" #include "api/units/time_delta.h" #include "rtc_base/async_packet_socket.h" #include "rtc_base/async_udp_socket.h" @@ -32,8 +34,8 @@ #include "rtc_base/test_client.h" #include "rtc_base/test_utils.h" #include "rtc_base/thread.h" -#include "rtc_base/time_utils.h" #include "rtc_base/virtual_socket_server.h" +#include "test/create_test_environment.h" #include "test/gtest.h" namespace webrtc { @@ -48,15 +50,19 @@ using testing::StreamSink; // Sends at a constant rate but with random packet sizes. struct Sender { - Sender(Thread* th, Socket* s, uint32_t rt) - : thread(th), - socket(std::make_unique<AsyncUDPSocket>(s)), + Sender(const Environment& env, + Thread* th, + std::unique_ptr<Socket> s, + uint32_t rt) + : env(env), + thread(th), + socket(std::make_unique<AsyncUDPSocket>(env, std::move(s))), rate(rt), count(0) { - last_send = TimeMillis(); + last_send = this->env.clock().TimeInMilliseconds(); periodic = RepeatingTaskHandle::DelayedStart(thread, NextDelay(), [this] { - int64_t cur_time = TimeMillis(); + int64_t cur_time = this->env.clock().TimeInMilliseconds(); int64_t delay = cur_time - last_send; uint32_t size = std::clamp<uint32_t>(rate * delay / 1000, sizeof(uint32_t), 4096); @@ -74,6 +80,7 @@ struct Sender { return TimeDelta::Seconds(1) * size / rate; } + const Environment env; Thread* thread; std::unique_ptr<AsyncUDPSocket> socket; AsyncSocketPacketOptions options; @@ -85,9 +92,13 @@ struct Sender { }; struct Receiver { - Receiver(Thread* th, Socket* s, uint32_t bw) - : thread(th), - socket(std::make_unique<AsyncUDPSocket>(s)), + Receiver(const Environment& env, + Thread* th, + std::unique_ptr<Socket> s, + uint32_t bw) + : env(env), + thread(th), + socket(std::make_unique<AsyncUDPSocket>(this->env, std::move(s))), bandwidth(bw), count(0), sec_count(0), @@ -121,13 +132,14 @@ struct Receiver { uint32_t send_time = *reinterpret_cast<const uint32_t*>(packet.payload().data()); - uint32_t recv_time = TimeMillis(); + uint32_t recv_time = env.clock().TimeInMilliseconds(); uint32_t delay = recv_time - send_time; sum += delay; sum_sq += delay * delay; samples += 1; } + const Environment env; Thread* thread; std::unique_ptr<AsyncUDPSocket> socket; uint32_t bandwidth; @@ -174,70 +186,80 @@ class VirtualSocketServerTest : public ::testing::Test { ss_.SetDefaultSourceAddress(default_address); // Create client1 bound to the any address. - Socket* socket = ss_.CreateSocket(default_address.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket = + ss_.Create(default_address.family(), SOCK_DGRAM); socket->Bind(EmptySocketAddressWithFamily(default_address.family())); SocketAddress client1_any_addr = socket->GetLocalAddress(); EXPECT_TRUE(client1_any_addr.IsAnyIP()); - auto client1 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket), &fake_clock_); + TestClient client1( + std::make_unique<AsyncUDPSocket>(env_, std::move(socket)), + &fake_clock_); // Create client2 bound to the address route. - Socket* socket2 = ss_.CreateSocket(default_address.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket2 = + ss_.Create(default_address.family(), SOCK_DGRAM); socket2->Bind(SocketAddress(default_address, 0)); SocketAddress client2_addr = socket2->GetLocalAddress(); EXPECT_FALSE(client2_addr.IsAnyIP()); - auto client2 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket2), &fake_clock_); + TestClient client2( + std::make_unique<AsyncUDPSocket>(env_, std::move(socket2)), + &fake_clock_); // Client1 sends to client2, client2 should see the default address as // client1's address. SocketAddress client1_addr; - EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr)); - EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr)); + EXPECT_EQ(6, client1.SendTo("bizbaz", 6, client2_addr)); + EXPECT_TRUE(client2.CheckNextPacket("bizbaz", 6, &client1_addr)); EXPECT_EQ(client1_addr, SocketAddress(default_address, client1_any_addr.port())); // Client2 can send back to client1's default address. - EXPECT_EQ(3, client2->SendTo("foo", 3, client1_addr)); - EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr)); + EXPECT_EQ(3, client2.SendTo("foo", 3, client1_addr)); + EXPECT_TRUE(client1.CheckNextPacket("foo", 3, &client2_addr)); } void BasicTest(const SocketAddress& initial_addr) { - Socket* socket = ss_.CreateSocket(initial_addr.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket = + ss_.Create(initial_addr.family(), SOCK_DGRAM); socket->Bind(initial_addr); SocketAddress server_addr = socket->GetLocalAddress(); // Make sure VSS didn't switch families on us. EXPECT_EQ(server_addr.family(), initial_addr.family()); - auto client1 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket), &fake_clock_); - Socket* socket2 = ss_.CreateSocket(initial_addr.family(), SOCK_DGRAM); - auto client2 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket2), &fake_clock_); - + TestClient client1( + std::make_unique<AsyncUDPSocket>(env_, std::move(socket)), + &fake_clock_); SocketAddress client2_addr; - EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr)); - EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr)); + { + std::unique_ptr<Socket> socket2 = + ss_.Create(initial_addr.family(), SOCK_DGRAM); + TestClient client2( + std::make_unique<AsyncUDPSocket>(env_, std::move(socket2)), + &fake_clock_); - SocketAddress client1_addr; - EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr)); - EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr)); - EXPECT_EQ(client1_addr, server_addr); + EXPECT_EQ(3, client2.SendTo("foo", 3, server_addr)); + EXPECT_TRUE(client1.CheckNextPacket("foo", 3, &client2_addr)); + + SocketAddress client1_addr; + EXPECT_EQ(6, client1.SendTo("bizbaz", 6, client2_addr)); + EXPECT_TRUE(client2.CheckNextPacket("bizbaz", 6, &client1_addr)); + EXPECT_EQ(client1_addr, server_addr); + } SocketAddress empty = EmptySocketAddressWithFamily(initial_addr.family()); for (int i = 0; i < 10; i++) { - client2 = std::make_unique<TestClient>( - absl::WrapUnique(AsyncUDPSocket::Create(&ss_, empty)), &fake_clock_); + TestClient client2(AsyncUDPSocket::Create(env_, empty, ss_), + &fake_clock_); SocketAddress next_client2_addr; - EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr)); - EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &next_client2_addr)); + EXPECT_EQ(3, client2.SendTo("foo", 3, server_addr)); + EXPECT_TRUE(client1.CheckNextPacket("foo", 3, &next_client2_addr)); CheckPortIncrementalization(next_client2_addr, client2_addr); // EXPECT_EQ(next_client2_addr.port(), client2_addr.port() + 1); SocketAddress server_addr2; - EXPECT_EQ(6, client1->SendTo("bizbaz", 6, next_client2_addr)); - EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &server_addr2)); + EXPECT_EQ(6, client1.SendTo("bizbaz", 6, next_client2_addr)); + EXPECT_TRUE(client2.CheckNextPacket("bizbaz", 6, &server_addr2)); EXPECT_EQ(server_addr2, server_addr); client2_addr = next_client2_addr; @@ -253,14 +275,14 @@ class VirtualSocketServerTest : public ::testing::Test { // Create client std::unique_ptr<Socket> client = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(client.get()); EXPECT_EQ(client->GetState(), Socket::CS_CLOSED); EXPECT_TRUE(client->GetLocalAddress().IsNil()); // Create server std::unique_ptr<Socket> server = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_NE(0, server->Listen(5)); // Bind required EXPECT_EQ(0, server->Bind(initial_addr)); @@ -322,12 +344,12 @@ class VirtualSocketServerTest : public ::testing::Test { // Create client std::unique_ptr<Socket> client = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(client.get()); // Create server std::unique_ptr<Socket> server = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(server.get()); EXPECT_EQ(0, server->Bind(initial_addr)); EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family()); @@ -355,11 +377,11 @@ class VirtualSocketServerTest : public ::testing::Test { EmptySocketAddressWithFamily(initial_addr.family()); // Create client and server - std::unique_ptr<Socket> client( - ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> client = + ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(client.get()); - std::unique_ptr<Socket> server( - ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> server = + ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(server.get()); // Initiate connect @@ -379,7 +401,7 @@ class VirtualSocketServerTest : public ::testing::Test { EXPECT_EQ(client->GetState(), Socket::CS_CLOSED); EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR)); - server.reset(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + server = ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(server.get()); // Initiate connect @@ -402,7 +424,7 @@ class VirtualSocketServerTest : public ::testing::Test { EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR)); // New server - server.reset(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + server = ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(server.get()); // Initiate connect @@ -440,14 +462,12 @@ class VirtualSocketServerTest : public ::testing::Test { const SocketAddress kEmptyAddr; // Create clients - std::unique_ptr<Socket> a = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> a = ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(a.get()); a->Bind(initial_addr); EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family()); - std::unique_ptr<Socket> b = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> b = ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(b.get()); b->Bind(initial_addr); EXPECT_EQ(b->GetLocalAddress().family(), initial_addr.family()); @@ -490,14 +510,12 @@ class VirtualSocketServerTest : public ::testing::Test { const SocketAddress kEmptyAddr; // Connect two sockets - std::unique_ptr<Socket> a = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> a = ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(a.get()); a->Bind(initial_addr); EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family()); - std::unique_ptr<Socket> b = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> b = ss_.Create(initial_addr.family(), SOCK_STREAM); sink.Monitor(b.get()); b->Bind(initial_addr); EXPECT_EQ(b->GetLocalAddress().family(), initial_addr.family()); @@ -612,10 +630,8 @@ class VirtualSocketServerTest : public ::testing::Test { const SocketAddress kEmptyAddr; // Connect two sockets - std::unique_ptr<Socket> a = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); - std::unique_ptr<Socket> b = - absl::WrapUnique(ss_.CreateSocket(initial_addr.family(), SOCK_STREAM)); + std::unique_ptr<Socket> a = ss_.Create(initial_addr.family(), SOCK_STREAM); + std::unique_ptr<Socket> b = ss_.Create(initial_addr.family(), SOCK_STREAM); a->Bind(initial_addr); EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family()); @@ -666,8 +682,10 @@ class VirtualSocketServerTest : public ::testing::Test { // incremental port behavior could ensure the 2 Binds result in different // address. void BandwidthTest(const SocketAddress& initial_addr) { - Socket* send_socket = ss_.CreateSocket(initial_addr.family(), SOCK_DGRAM); - Socket* recv_socket = ss_.CreateSocket(initial_addr.family(), SOCK_DGRAM); + std::unique_ptr<Socket> send_socket = + ss_.Create(initial_addr.family(), SOCK_DGRAM); + std::unique_ptr<Socket> recv_socket = + ss_.Create(initial_addr.family(), SOCK_DGRAM); ASSERT_EQ(0, send_socket->Bind(initial_addr)); ASSERT_EQ(0, recv_socket->Bind(initial_addr)); EXPECT_EQ(send_socket->GetLocalAddress().family(), initial_addr.family()); @@ -678,8 +696,8 @@ class VirtualSocketServerTest : public ::testing::Test { ss_.set_bandwidth(bandwidth); Thread* pthMain = Thread::Current(); - Sender sender(pthMain, send_socket, 80 * 1024); - Receiver receiver(pthMain, recv_socket, bandwidth); + Sender sender(env_, pthMain, std::move(send_socket), 80 * 1024); + Receiver receiver(env_, pthMain, std::move(recv_socket), bandwidth); // Allow the sender to run for 5 (simulated) seconds, then be stopped for 5 // seconds. @@ -709,8 +727,10 @@ class VirtualSocketServerTest : public ::testing::Test { ss_.set_delay_stddev(stddev); ss_.UpdateDelayDistribution(); - Socket* send_socket = ss_.CreateSocket(initial_addr.family(), SOCK_DGRAM); - Socket* recv_socket = ss_.CreateSocket(initial_addr.family(), SOCK_DGRAM); + std::unique_ptr<Socket> send_socket = + ss_.Create(initial_addr.family(), SOCK_DGRAM); + std::unique_ptr<Socket> recv_socket = + ss_.Create(initial_addr.family(), SOCK_DGRAM); ASSERT_EQ(0, send_socket->Bind(initial_addr)); ASSERT_EQ(0, recv_socket->Bind(initial_addr)); EXPECT_EQ(send_socket->GetLocalAddress().family(), initial_addr.family()); @@ -720,8 +740,8 @@ class VirtualSocketServerTest : public ::testing::Test { Thread* pthMain = Thread::Current(); // Avg packet size is 2K, so at 200KB/s for 10s, we should see about // 1000 packets, which is necessary to get a good distribution. - Sender sender(pthMain, send_socket, 100 * 2 * 1024); - Receiver receiver(pthMain, recv_socket, 0); + Sender sender(env_, pthMain, std::move(send_socket), 100 * 2 * 1024); + Receiver receiver(env_, pthMain, std::move(recv_socket), 0); // Simulate 10 seconds of packets being sent, then check the observed delay // distribution. @@ -761,7 +781,7 @@ class VirtualSocketServerTest : public ::testing::Test { // Client gets a IPv4 address std::unique_ptr<Socket> client = - absl::WrapUnique(ss_.CreateSocket(client_addr.family(), SOCK_STREAM)); + ss_.Create(client_addr.family(), SOCK_STREAM); sink.Monitor(client.get()); EXPECT_EQ(client->GetState(), Socket::CS_CLOSED); EXPECT_EQ(client->GetLocalAddress(), kEmptyAddr); @@ -770,7 +790,7 @@ class VirtualSocketServerTest : public ::testing::Test { // Server gets a non-mapped non-any IPv6 address. // IPv4 sockets should not be able to connect to this. std::unique_ptr<Socket> server = - absl::WrapUnique(ss_.CreateSocket(server_addr.family(), SOCK_STREAM)); + ss_.Create(server_addr.family(), SOCK_STREAM); sink.Monitor(server.get()); server->Bind(server_addr); server->Listen(5); @@ -806,33 +826,36 @@ class VirtualSocketServerTest : public ::testing::Test { void CrossFamilyDatagramTest(const SocketAddress& client_addr, const SocketAddress& server_addr, bool shouldSucceed) { - Socket* socket = ss_.CreateSocket(AF_INET, SOCK_DGRAM); + std::unique_ptr<Socket> socket = ss_.Create(AF_INET, SOCK_DGRAM); socket->Bind(server_addr); SocketAddress bound_server_addr = socket->GetLocalAddress(); - auto client1 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket), &fake_clock_); + TestClient client1( + std::make_unique<AsyncUDPSocket>(env_, std::move(socket)), + &fake_clock_); - Socket* socket2 = ss_.CreateSocket(AF_INET, SOCK_DGRAM); + std::unique_ptr<Socket> socket2 = ss_.Create(AF_INET, SOCK_DGRAM); socket2->Bind(client_addr); - auto client2 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket2), &fake_clock_); + TestClient client2( + std::make_unique<AsyncUDPSocket>(env_, std::move(socket2)), + &fake_clock_); SocketAddress client2_addr; if (shouldSucceed) { - EXPECT_EQ(3, client2->SendTo("foo", 3, bound_server_addr)); - EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr)); + EXPECT_EQ(3, client2.SendTo("foo", 3, bound_server_addr)); + EXPECT_TRUE(client1.CheckNextPacket("foo", 3, &client2_addr)); SocketAddress client1_addr; - EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr)); - EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr)); + EXPECT_EQ(6, client1.SendTo("bizbaz", 6, client2_addr)); + EXPECT_TRUE(client2.CheckNextPacket("bizbaz", 6, &client1_addr)); EXPECT_EQ(client1_addr, bound_server_addr); } else { - EXPECT_EQ(-1, client2->SendTo("foo", 3, bound_server_addr)); - EXPECT_TRUE(client1->CheckNoPacket()); + EXPECT_EQ(-1, client2.SendTo("foo", 3, bound_server_addr)); + EXPECT_TRUE(client1.CheckNoPacket()); } } protected: ScopedFakeClock fake_clock_; + const Environment env_ = CreateTestEnvironment(); VirtualSocketServer ss_; AutoSocketServerThread thread_; const SocketAddress kIPv4AnyAddress; @@ -1014,22 +1037,24 @@ TEST_F(VirtualSocketServerTest, CanSendDatagramFromUnboundIPv6ToIPv4Any) { } TEST_F(VirtualSocketServerTest, SetSendingBlockedWithUdpSocket) { - Socket* socket1 = ss_.CreateSocket(kIPv4AnyAddress.family(), SOCK_DGRAM); + std::unique_ptr<Socket> socket1 = + ss_.Create(kIPv4AnyAddress.family(), SOCK_DGRAM); + Socket& socket1_ref = *socket1; std::unique_ptr<Socket> socket2 = - absl::WrapUnique(ss_.CreateSocket(kIPv4AnyAddress.family(), SOCK_DGRAM)); + ss_.Create(kIPv4AnyAddress.family(), SOCK_DGRAM); socket1->Bind(kIPv4AnyAddress); socket2->Bind(kIPv4AnyAddress); - auto client1 = std::make_unique<TestClient>( - std::make_unique<AsyncUDPSocket>(socket1), &fake_clock_); + TestClient client1(std::make_unique<AsyncUDPSocket>(env_, std::move(socket1)), + &fake_clock_); ss_.SetSendingBlocked(true); - EXPECT_EQ(-1, client1->SendTo("foo", 3, socket2->GetLocalAddress())); - EXPECT_TRUE(socket1->IsBlocking()); - EXPECT_EQ(0, client1->ready_to_send_count()); + EXPECT_EQ(-1, client1.SendTo("foo", 3, socket2->GetLocalAddress())); + EXPECT_TRUE(socket1_ref.IsBlocking()); + EXPECT_EQ(0, client1.ready_to_send_count()); ss_.SetSendingBlocked(false); - EXPECT_EQ(1, client1->ready_to_send_count()); - EXPECT_EQ(3, client1->SendTo("foo", 3, socket2->GetLocalAddress())); + EXPECT_EQ(1, client1.ready_to_send_count()); + EXPECT_EQ(3, client1.SendTo("foo", 3, socket2->GetLocalAddress())); } TEST_F(VirtualSocketServerTest, SetSendingBlockedWithTcpSocket) { @@ -1039,9 +1064,9 @@ TEST_F(VirtualSocketServerTest, SetSendingBlockedWithTcpSocket) { StreamSink sink; std::unique_ptr<Socket> socket1 = - absl::WrapUnique(ss_.CreateSocket(kIPv4AnyAddress.family(), SOCK_STREAM)); + ss_.Create(kIPv4AnyAddress.family(), SOCK_STREAM); std::unique_ptr<Socket> socket2 = - absl::WrapUnique(ss_.CreateSocket(kIPv4AnyAddress.family(), SOCK_STREAM)); + ss_.Create(kIPv4AnyAddress.family(), SOCK_STREAM); sink.Monitor(socket1.get()); sink.Monitor(socket2.get()); socket1->Bind(kIPv4AnyAddress);