Add getsockopt tests for SO_SNDTIMEO and SO_RCVTIMEO

PiperOrigin-RevId: 297485310
This commit is contained in:
Jay Zhuang 2020-02-26 18:16:19 -08:00 committed by gVisor bot
parent a92087f0f8
commit de0b2ebf86
1 changed files with 88 additions and 8 deletions

View File

@ -447,6 +447,60 @@ TEST_P(AllSocketPairTest, RecvTimeoutRecvmsgSucceeds) {
SyscallFailsWithErrno(EAGAIN));
}
TEST_P(AllSocketPairTest, SendTimeoutDefault) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
timeval actual_tv = {.tv_sec = -1, .tv_usec = -1};
socklen_t len = sizeof(actual_tv);
EXPECT_THAT(getsockopt(sockets->first_fd(), SOL_SOCKET, SO_SNDTIMEO,
&actual_tv, &len),
SyscallSucceeds());
EXPECT_EQ(actual_tv.tv_sec, 0);
EXPECT_EQ(actual_tv.tv_usec, 0);
}
TEST_P(AllSocketPairTest, SetGetSendTimeout) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
timeval tv = {.tv_sec = 89, .tv_usec = 42000};
EXPECT_THAT(
setsockopt(sockets->first_fd(), SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)),
SyscallSucceeds());
timeval actual_tv = {};
socklen_t len = sizeof(actual_tv);
EXPECT_THAT(getsockopt(sockets->first_fd(), SOL_SOCKET, SO_SNDTIMEO,
&actual_tv, &len),
SyscallSucceeds());
EXPECT_EQ(actual_tv.tv_sec, 89);
EXPECT_EQ(actual_tv.tv_usec, 42000);
}
TEST_P(AllSocketPairTest, SetGetSendTimeoutLargerArg) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
struct timeval_with_extra {
struct timeval tv;
int64_t extra_data;
} ABSL_ATTRIBUTE_PACKED;
timeval_with_extra tv_extra = {
.tv = {.tv_sec = 0, .tv_usec = 123000},
};
EXPECT_THAT(setsockopt(sockets->first_fd(), SOL_SOCKET, SO_SNDTIMEO,
&tv_extra, sizeof(tv_extra)),
SyscallSucceeds());
timeval_with_extra actual_tv = {};
socklen_t len = sizeof(actual_tv);
EXPECT_THAT(getsockopt(sockets->first_fd(), SOL_SOCKET, SO_SNDTIMEO,
&actual_tv, &len),
SyscallSucceeds());
EXPECT_EQ(actual_tv.tv.tv_sec, 0);
EXPECT_EQ(actual_tv.tv.tv_usec, 123000);
}
TEST_P(AllSocketPairTest, SendTimeoutAllowsWrite) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
@ -491,18 +545,36 @@ TEST_P(AllSocketPairTest, SendTimeoutAllowsSendmsg) {
ASSERT_NO_FATAL_FAILURE(SendNullCmsg(sockets->first_fd(), buf, sizeof(buf)));
}
TEST_P(AllSocketPairTest, SoRcvTimeoIsSet) {
TEST_P(AllSocketPairTest, RecvTimeoutDefault) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
struct timeval tv {
.tv_sec = 0, .tv_usec = 35
};
timeval actual_tv = {.tv_sec = -1, .tv_usec = -1};
socklen_t len = sizeof(actual_tv);
EXPECT_THAT(getsockopt(sockets->first_fd(), SOL_SOCKET, SO_RCVTIMEO,
&actual_tv, &len),
SyscallSucceeds());
EXPECT_EQ(actual_tv.tv_sec, 0);
EXPECT_EQ(actual_tv.tv_usec, 0);
}
TEST_P(AllSocketPairTest, SetGetRecvTimeout) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
timeval tv = {.tv_sec = 123, .tv_usec = 456000};
EXPECT_THAT(
setsockopt(sockets->first_fd(), SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)),
SyscallSucceeds());
timeval actual_tv = {};
socklen_t len = sizeof(actual_tv);
EXPECT_THAT(getsockopt(sockets->first_fd(), SOL_SOCKET, SO_RCVTIMEO,
&actual_tv, &len),
SyscallSucceeds());
EXPECT_EQ(actual_tv.tv_sec, 123);
EXPECT_EQ(actual_tv.tv_usec, 456000);
}
TEST_P(AllSocketPairTest, SoRcvTimeoIsSetLargerArg) {
TEST_P(AllSocketPairTest, SetGetRecvTimeoutLargerArg) {
auto sockets = ASSERT_NO_ERRNO_AND_VALUE(NewSocketPair());
struct timeval_with_extra {
@ -510,13 +582,21 @@ TEST_P(AllSocketPairTest, SoRcvTimeoIsSetLargerArg) {
int64_t extra_data;
} ABSL_ATTRIBUTE_PACKED;
timeval_with_extra tv_extra;
tv_extra.tv.tv_sec = 0;
tv_extra.tv.tv_usec = 25;
timeval_with_extra tv_extra = {
.tv = {.tv_sec = 0, .tv_usec = 432000},
};
EXPECT_THAT(setsockopt(sockets->first_fd(), SOL_SOCKET, SO_RCVTIMEO,
&tv_extra, sizeof(tv_extra)),
SyscallSucceeds());
timeval_with_extra actual_tv = {};
socklen_t len = sizeof(actual_tv);
EXPECT_THAT(getsockopt(sockets->first_fd(), SOL_SOCKET, SO_RCVTIMEO,
&actual_tv, &len),
SyscallSucceeds());
EXPECT_EQ(actual_tv.tv.tv_sec, 0);
EXPECT_EQ(actual_tv.tv.tv_usec, 432000);
}
TEST_P(AllSocketPairTest, RecvTimeoutRecvmsgOneSecondSucceeds) {