From 6fb8c01bb488e22c741a307e030b61c512dcd34f Mon Sep 17 00:00:00 2001 From: Kevin Krakauer Date: Fri, 30 Apr 2021 17:55:54 -0700 Subject: Fix //test/syscalls:tcp_socket_test_native The data written was larger than the write buffer, and nobody was reading the other end. PiperOrigin-RevId: 371436084 --- test/syscalls/linux/BUILD | 1 + test/syscalls/linux/tcp_socket.cc | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/test/syscalls/linux/BUILD b/test/syscalls/linux/BUILD index 94a582256..b07f556de 100644 --- a/test/syscalls/linux/BUILD +++ b/test/syscalls/linux/BUILD @@ -3710,6 +3710,7 @@ cc_binary( deps = [ ":socket_test_util", "//test/util:file_descriptor", + "@com_google_absl//absl/strings", "@com_google_absl//absl/time", gtest, "//test/util:posix_error", diff --git a/test/syscalls/linux/tcp_socket.cc b/test/syscalls/linux/tcp_socket.cc index 011b60f0e..ef3452306 100644 --- a/test/syscalls/linux/tcp_socket.cc +++ b/test/syscalls/linux/tcp_socket.cc @@ -27,6 +27,7 @@ #include #include "gtest/gtest.h" +#include "absl/strings/str_split.h" #include "absl/time/clock.h" #include "absl/time/time.h" #include "test/syscalls/linux/socket_test_util.h" @@ -1144,6 +1145,17 @@ TEST_P(SimpleTcpSocketTest, SelfConnectSendRecv) { } TEST_P(SimpleTcpSocketTest, SelfConnectSend) { + // Ensure the write size is not larger than the write buffer. + size_t write_size = 512 << 10; // 512 KiB. + constexpr char kWMem[] = "/proc/sys/net/ipv4/tcp_wmem"; + std::string wmem = ASSERT_NO_ERRNO_AND_VALUE(GetContents(kWMem)); + std::vector vals = absl::StrSplit(wmem, absl::ByAnyChar("\t ")); + size_t max_wmem; + ASSERT_TRUE(absl::SimpleAtoi(vals.back(), &max_wmem)); + if (write_size > max_wmem) { + write_size = max_wmem; + } + // Initialize address to the loopback one. sockaddr_storage addr = ASSERT_NO_ERRNO_AND_VALUE(InetLoopbackAddr(GetParam())); @@ -1164,7 +1176,7 @@ TEST_P(SimpleTcpSocketTest, SelfConnectSend) { ASSERT_THAT(RetryEINTR(connect)(s.get(), AsSockAddr(&addr), addrlen), SyscallSucceeds()); - std::vector writebuf(512 << 10); // 512 KiB. + std::vector writebuf(write_size); // Try to send the whole thing. int n; -- cgit v1.2.3