mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Clean up readv_socket test suite.
Get rid of the SocketTest class, which is only extended by ReadvSocketTest. Also, get rid of TCP sockets (which were unused anyway) from readv_socket.cc. This is a very old test suite that isn't the right place for TCP loopback tests. PiperOrigin-RevId: 283672772
This commit is contained in:
@@ -1795,7 +1795,6 @@ cc_binary(
|
||||
name = "readv_socket_test",
|
||||
testonly = 1,
|
||||
srcs = [
|
||||
"file_base.h",
|
||||
"readv_common.cc",
|
||||
"readv_common.h",
|
||||
"readv_socket.cc",
|
||||
|
||||
@@ -111,95 +111,6 @@ class FileTest : public ::testing::Test {
|
||||
int test_pipe_[2];
|
||||
};
|
||||
|
||||
class SocketTest : public ::testing::Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
test_unix_stream_socket_[0] = -1;
|
||||
test_unix_stream_socket_[1] = -1;
|
||||
test_unix_dgram_socket_[0] = -1;
|
||||
test_unix_dgram_socket_[1] = -1;
|
||||
test_unix_seqpacket_socket_[0] = -1;
|
||||
test_unix_seqpacket_socket_[1] = -1;
|
||||
test_tcp_socket_[0] = -1;
|
||||
test_tcp_socket_[1] = -1;
|
||||
|
||||
ASSERT_THAT(socketpair(AF_UNIX, SOCK_STREAM, 0, test_unix_stream_socket_),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(fcntl(test_unix_stream_socket_[0], F_SETFL, O_NONBLOCK),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(socketpair(AF_UNIX, SOCK_DGRAM, 0, test_unix_dgram_socket_),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(fcntl(test_unix_dgram_socket_[0], F_SETFL, O_NONBLOCK),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(
|
||||
socketpair(AF_UNIX, SOCK_SEQPACKET, 0, test_unix_seqpacket_socket_),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(fcntl(test_unix_seqpacket_socket_[0], F_SETFL, O_NONBLOCK),
|
||||
SyscallSucceeds());
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
close(test_unix_stream_socket_[0]);
|
||||
close(test_unix_stream_socket_[1]);
|
||||
|
||||
close(test_unix_dgram_socket_[0]);
|
||||
close(test_unix_dgram_socket_[1]);
|
||||
|
||||
close(test_unix_seqpacket_socket_[0]);
|
||||
close(test_unix_seqpacket_socket_[1]);
|
||||
|
||||
close(test_tcp_socket_[0]);
|
||||
close(test_tcp_socket_[1]);
|
||||
}
|
||||
|
||||
int test_unix_stream_socket_[2];
|
||||
int test_unix_dgram_socket_[2];
|
||||
int test_unix_seqpacket_socket_[2];
|
||||
int test_tcp_socket_[2];
|
||||
};
|
||||
|
||||
// MatchesStringLength checks that a tuple argument of (struct iovec *, int)
|
||||
// corresponding to an iovec array and its length, contains data that matches
|
||||
// the string length strlen.
|
||||
MATCHER_P(MatchesStringLength, strlen, "") {
|
||||
struct iovec* iovs = arg.first;
|
||||
int niov = arg.second;
|
||||
int offset = 0;
|
||||
for (int i = 0; i < niov; i++) {
|
||||
offset += iovs[i].iov_len;
|
||||
}
|
||||
if (offset != static_cast<int>(strlen)) {
|
||||
*result_listener << offset;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// MatchesStringValue checks that a tuple argument of (struct iovec *, int)
|
||||
// corresponding to an iovec array and its length, contains data that matches
|
||||
// the string value str.
|
||||
MATCHER_P(MatchesStringValue, str, "") {
|
||||
struct iovec* iovs = arg.first;
|
||||
int len = strlen(str);
|
||||
int niov = arg.second;
|
||||
int offset = 0;
|
||||
for (int i = 0; i < niov; i++) {
|
||||
struct iovec iov = iovs[i];
|
||||
if (len < offset) {
|
||||
*result_listener << "strlen " << len << " < offset " << offset;
|
||||
return false;
|
||||
}
|
||||
if (strncmp(static_cast<char*>(iov.iov_base), &str[offset], iov.iov_len)) {
|
||||
absl::string_view iovec_string(static_cast<char*>(iov.iov_base),
|
||||
iov.iov_len);
|
||||
*result_listener << iovec_string << " @offset " << offset;
|
||||
return false;
|
||||
}
|
||||
offset += iov.iov_len;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
} // namespace gvisor
|
||||
|
||||
|
||||
@@ -19,12 +19,53 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "test/syscalls/linux/file_base.h"
|
||||
#include "test/util/test_util.h"
|
||||
|
||||
namespace gvisor {
|
||||
namespace testing {
|
||||
|
||||
// MatchesStringLength checks that a tuple argument of (struct iovec *, int)
|
||||
// corresponding to an iovec array and its length, contains data that matches
|
||||
// the string length strlen.
|
||||
MATCHER_P(MatchesStringLength, strlen, "") {
|
||||
struct iovec* iovs = arg.first;
|
||||
int niov = arg.second;
|
||||
int offset = 0;
|
||||
for (int i = 0; i < niov; i++) {
|
||||
offset += iovs[i].iov_len;
|
||||
}
|
||||
if (offset != static_cast<int>(strlen)) {
|
||||
*result_listener << offset;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// MatchesStringValue checks that a tuple argument of (struct iovec *, int)
|
||||
// corresponding to an iovec array and its length, contains data that matches
|
||||
// the string value str.
|
||||
MATCHER_P(MatchesStringValue, str, "") {
|
||||
struct iovec* iovs = arg.first;
|
||||
int len = strlen(str);
|
||||
int niov = arg.second;
|
||||
int offset = 0;
|
||||
for (int i = 0; i < niov; i++) {
|
||||
struct iovec iov = iovs[i];
|
||||
if (len < offset) {
|
||||
*result_listener << "strlen " << len << " < offset " << offset;
|
||||
return false;
|
||||
}
|
||||
if (strncmp(static_cast<char*>(iov.iov_base), &str[offset], iov.iov_len)) {
|
||||
absl::string_view iovec_string(static_cast<char*>(iov.iov_base),
|
||||
iov.iov_len);
|
||||
*result_listener << iovec_string << " @offset " << offset;
|
||||
return false;
|
||||
}
|
||||
offset += iov.iov_len;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
extern const char kReadvTestData[] =
|
||||
"127.0.0.1 localhost"
|
||||
""
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "test/syscalls/linux/file_base.h"
|
||||
#include "test/syscalls/linux/readv_common.h"
|
||||
#include "test/util/test_util.h"
|
||||
|
||||
@@ -28,9 +27,30 @@ namespace testing {
|
||||
|
||||
namespace {
|
||||
|
||||
class ReadvSocketTest : public SocketTest {
|
||||
class ReadvSocketTest : public ::testing::Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
SocketTest::SetUp();
|
||||
test_unix_stream_socket_[0] = -1;
|
||||
test_unix_stream_socket_[1] = -1;
|
||||
test_unix_dgram_socket_[0] = -1;
|
||||
test_unix_dgram_socket_[1] = -1;
|
||||
test_unix_seqpacket_socket_[0] = -1;
|
||||
test_unix_seqpacket_socket_[1] = -1;
|
||||
|
||||
ASSERT_THAT(socketpair(AF_UNIX, SOCK_STREAM, 0, test_unix_stream_socket_),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(fcntl(test_unix_stream_socket_[0], F_SETFL, O_NONBLOCK),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(socketpair(AF_UNIX, SOCK_DGRAM, 0, test_unix_dgram_socket_),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(fcntl(test_unix_dgram_socket_[0], F_SETFL, O_NONBLOCK),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(
|
||||
socketpair(AF_UNIX, SOCK_SEQPACKET, 0, test_unix_seqpacket_socket_),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(fcntl(test_unix_seqpacket_socket_[0], F_SETFL, O_NONBLOCK),
|
||||
SyscallSucceeds());
|
||||
|
||||
ASSERT_THAT(
|
||||
write(test_unix_stream_socket_[1], kReadvTestData, kReadvTestDataSize),
|
||||
SyscallSucceedsWithValue(kReadvTestDataSize));
|
||||
@@ -40,11 +60,22 @@ class ReadvSocketTest : public SocketTest {
|
||||
ASSERT_THAT(write(test_unix_seqpacket_socket_[1], kReadvTestData,
|
||||
kReadvTestDataSize),
|
||||
SyscallSucceedsWithValue(kReadvTestDataSize));
|
||||
// FIXME(b/69821513): Enable when possible.
|
||||
// ASSERT_THAT(write(test_tcp_socket_[1], kReadvTestData,
|
||||
// kReadvTestDataSize),
|
||||
// SyscallSucceedsWithValue(kReadvTestDataSize));
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
close(test_unix_stream_socket_[0]);
|
||||
close(test_unix_stream_socket_[1]);
|
||||
|
||||
close(test_unix_dgram_socket_[0]);
|
||||
close(test_unix_dgram_socket_[1]);
|
||||
|
||||
close(test_unix_seqpacket_socket_[0]);
|
||||
close(test_unix_seqpacket_socket_[1]);
|
||||
}
|
||||
|
||||
int test_unix_stream_socket_[2];
|
||||
int test_unix_dgram_socket_[2];
|
||||
int test_unix_seqpacket_socket_[2];
|
||||
};
|
||||
|
||||
TEST_F(ReadvSocketTest, ReadOneBufferPerByte_StreamSocket) {
|
||||
|
||||
Reference in New Issue
Block a user