From d984f7e8d853f83b8b07326d042bd1d12e83750b Mon Sep 17 00:00:00 2001 From: gVisor bot Date: Wed, 7 Dec 2022 14:55:03 -0800 Subject: [PATCH] Test that setting a timerfd to expire in the past makes it expire immediately PiperOrigin-RevId: 493716667 --- test/syscalls/linux/timerfd.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/syscalls/linux/timerfd.cc b/test/syscalls/linux/timerfd.cc index e067cfd43..da03a3332 100644 --- a/test/syscalls/linux/timerfd.cc +++ b/test/syscalls/linux/timerfd.cc @@ -204,6 +204,19 @@ TEST_P(TimerfdTest, SetAbsoluteTime) { EXPECT_EQ(1, val); } +TEST_P(TimerfdTest, SetToPastExpiresEventually) { + auto const tfd = ASSERT_NO_ERRNO_AND_VALUE(TimerfdCreate(GetParam(), 0)); + struct itimerspec its = {}; + its.it_value.tv_nsec = 1; + ASSERT_THAT(timerfd_settime(tfd.get(), TFD_TIMER_ABSTIME, &its, nullptr), + SyscallSucceeds()); + + uint64_t val = 0; + ASSERT_THAT(ReadFd(tfd.get(), &val, sizeof(uint64_t)), + SyscallSucceedsWithValue(sizeof(uint64_t))); + ASSERT_EQ(val, 1); +} + TEST_P(TimerfdTest, IllegalSeek) { auto const tfd = ASSERT_NO_ERRNO_AND_VALUE(TimerfdCreate(GetParam(), 0)); EXPECT_THAT(lseek(tfd.get(), 0, SEEK_SET), SyscallFailsWithErrno(ESPIPE));