Add epoll_pwait2().
I've also added doc comments for everything in <sys/epoll.h>.
I've also broken up the old "smoke" test (which was taking 2s on my
riscv64 qemu) to keep the total runtime for all the tests down to 200ms.
Test: treehugger
Change-Id: Icd939af51886fdf21432653a07373c1a0f26e422
diff --git a/tests/sys_epoll_test.cpp b/tests/sys_epoll_test.cpp
index fb2a48f..8dee93f 100644
--- a/tests/sys_epoll_test.cpp
+++ b/tests/sys_epoll_test.cpp
@@ -24,29 +24,101 @@
#include "utils.h"
-TEST(sys_epoll, smoke) {
+TEST(sys_epoll, epoll_wait) {
int epoll_fd = epoll_create(1);
- ASSERT_NE(-1, epoll_fd) << strerror(errno);
- epoll_event events[1];
+ ASSERT_NE(-1, epoll_fd);
// Regular epoll_wait.
+ epoll_event events[1] = {};
ASSERT_EQ(0, epoll_wait(epoll_fd, events, 1, 1));
+}
+
+TEST(sys_epoll, epoll_pwait_no_sigset) {
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd);
// epoll_pwait without a sigset (which is equivalent to epoll_wait).
+ epoll_event events[1] = {};
ASSERT_EQ(0, epoll_pwait(epoll_fd, events, 1, 1, nullptr));
+}
+TEST(sys_epoll, epoll_pwait64_no_sigset) {
#if defined(__BIONIC__)
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd);
+
// epoll_pwait64 without a sigset (which is equivalent to epoll_wait).
+ epoll_event events[1] = {};
ASSERT_EQ(0, epoll_pwait64(epoll_fd, events, 1, 1, nullptr));
+#else
+ GTEST_SKIP() << "epoll_pwait64 is bionic-only";
#endif
+}
+
+TEST(sys_epoll, epoll_pwait2_no_sigset) {
+#if defined(__BIONIC__)
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd);
+
+ // epoll_pwait2 without a sigset (which is equivalent to epoll_wait).
+ epoll_event events[1] = {};
+ timespec ts = {.tv_nsec = 500};
+ int rc = epoll_pwait2(epoll_fd, events, 1, &ts, nullptr);
+ if (rc == -1 && errno == ENOSYS) GTEST_SKIP() << "no epoll_pwait2 in this kernel";
+ ASSERT_EQ(0, rc) << strerror(errno);
+#else
+ GTEST_SKIP() << "epoll_pwait2 is only in glibc 2.35+";
+#endif
+}
+
+TEST(sys_epoll, epoll_pwait_with_sigset) {
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd);
// epoll_pwait with a sigset.
+ epoll_event events[1] = {};
sigset_t ss;
sigemptyset(&ss);
sigaddset(&ss, SIGPIPE);
ASSERT_EQ(0, epoll_pwait(epoll_fd, events, 1, 1, &ss));
}
+TEST(sys_epoll, epoll_pwait2_with_sigset) {
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd);
+
+#if defined(__BIONIC__)
+ epoll_event events[1] = {};
+ timespec ts = {.tv_nsec = 500};
+ sigset_t ss2;
+ sigemptyset(&ss2);
+ sigaddset(&ss2, SIGPIPE);
+ int rc = epoll_pwait2(epoll_fd, events, 1, &ts, &ss2);
+ if (rc == -1 && errno == ENOSYS) GTEST_SKIP() << "no epoll_pwait2 in this kernel";
+ ASSERT_EQ(0, rc) << strerror(errno);
+#else
+ GTEST_SKIP() << "epoll_pwait2 is only in glibc 2.35+";
+#endif
+}
+
+TEST(sys_epoll, epoll_pwait2_64_with_sigset) {
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd);
+
+#if defined(__BIONIC__)
+ epoll_event events[1] = {};
+ timespec ts = {.tv_nsec = 500};
+ sigset64_t ss2;
+ sigemptyset64(&ss2);
+ sigaddset64(&ss2, SIGPIPE);
+ int rc = epoll_pwait2_64(epoll_fd, events, 1, &ts, &ss2);
+ if (rc == -1 && errno == ENOSYS) GTEST_SKIP() << "no epoll_pwait2 in this kernel";
+ ASSERT_EQ(0, rc) << strerror(errno);
+#else
+ GTEST_SKIP() << "epoll_pwait2_64 is bionic-only";
+#endif
+}
+
TEST(sys_epoll, epoll_create_invalid_size) {
errno = 0;
ASSERT_EQ(-1, epoll_create(0));