summaryrefslogtreecommitdiffstats
path: root/testsuite/syscalls01/test_main.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-09-23 14:27:32 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-09-23 14:29:00 +0200
commitcff1625f2787e08f33e67f949c0722c0aa05f618 (patch)
tree0874b63641d70eccd26af7a11c04b839c0157641 /testsuite/syscalls01/test_main.c
parenttest/syscalls01: Fix sporadic test failures (diff)
downloadrtems-libbsd-cff1625f2787e08f33e67f949c0722c0aa05f618.tar.bz2
Add pselect()
Diffstat (limited to 'testsuite/syscalls01/test_main.c')
-rw-r--r--testsuite/syscalls01/test_main.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/testsuite/syscalls01/test_main.c b/testsuite/syscalls01/test_main.c
index b95a6c24..3254ba5c 100644
--- a/testsuite/syscalls01/test_main.c
+++ b/testsuite/syscalls01/test_main.c
@@ -1329,6 +1329,81 @@ test_socket_select(void)
}
static void
+no_mem_socket_pselect(int fd)
+{
+ struct fd_set set;
+ int nfds;
+ int rv;
+
+ FD_ZERO(&set);
+ FD_SET(fd, &set);
+ nfds = fd + 1;
+
+ errno = 0;
+ rv = pselect(nfds, &set, NULL, NULL, NULL, NULL);
+ assert(rv == -1);
+ assert(errno == ENOMEM);
+}
+
+static void
+test_socket_pselect(void)
+{
+ rtems_resource_snapshot snapshot;
+ struct fd_set set;
+ int nfds;
+ int sd;
+ int rv;
+
+ puts("test socket pselect");
+
+ sd = socket(PF_INET, SOCK_DGRAM, 0);
+ assert(sd >= 0);
+
+ rv = close(sd);
+ assert(rv == 0);
+
+ FD_ZERO(&set);
+ FD_SET(sd, &set);
+ nfds = sd + 1;
+
+ errno = 0;
+ rv = pselect(nfds, &set, NULL, NULL, NULL, NULL);
+ assert(rv == -1);
+ assert(errno == EBADF);
+
+ epoch_cleanup();
+ rtems_resource_snapshot_take(&snapshot);
+
+ sd = socket(PF_INET, SOCK_DGRAM, 0);
+ assert(sd >= 0);
+
+ do_no_mem_test(no_mem_socket_pselect, sd);
+
+ FD_ZERO(&set);
+ nfds = -1;
+
+ errno = 0;
+ rv = pselect(nfds, &set, NULL, NULL, NULL, NULL);
+ assert(rv == -1);
+ assert(errno == EINVAL);
+
+ rv = close(sd);
+ assert(rv == 0);
+
+ FD_ZERO(&set);
+ FD_SET(sd, &set);
+ nfds = sd + 1;
+
+ errno = 0;
+ rv = pselect(nfds, &set, NULL, NULL, NULL, NULL);
+ assert(rv == -1);
+ assert(errno == EBADF);
+
+ epoch_cleanup();
+ assert(rtems_resource_snapshot_check(&snapshot));
+}
+
+static void
no_mem_socket_poll(int fd)
{
struct pollfd pfd;
@@ -1662,6 +1737,7 @@ test_main(void)
test_socket_send_and_sendto_and_sendmsg();
test_socket_recv_and_recvfrom_and_recvmsg();
test_socket_select();
+ test_socket_pselect();
test_socket_poll();
test_socket_pair();