diff options
Diffstat (limited to 'testsuite/selectpollkqueue01/test_main.c')
-rwxr-xr-x | testsuite/selectpollkqueue01/test_main.c | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/testsuite/selectpollkqueue01/test_main.c b/testsuite/selectpollkqueue01/test_main.c index fc056432..244f5b50 100755 --- a/testsuite/selectpollkqueue01/test_main.c +++ b/testsuite/selectpollkqueue01/test_main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013, 2019 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -522,6 +522,63 @@ test_select_close(test_context *ctx) } static void +test_pselect_sigmask(void) +{ + int rv; + sigset_t set; + + puts("test pselect sigmask"); + + sigemptyset(&set); + errno = 0; + rv = pselect(0, NULL, NULL, NULL, NULL, &set); + assert(rv == -1); + assert(errno == ENOSYS); +} + +static void +test_pselect_timeout(test_context *ctx) +{ + struct timespec timeout = { + .tv_sec = 0, + .tv_nsec = 100000000 + }; + int fd = ctx->lfd; + int nfds = fd + 1; + struct fd_set set; + int rv; + int i; + + puts("test pselect timeout"); + + set_non_blocking(ctx->lfd, 0); + + FD_ZERO(&set); + FD_SET(fd, &set); + + rv = pselect(nfds, &set, NULL, NULL, &timeout, NULL); + assert(rv == 0); + + for (i = 0; i < nfds; ++i) { + assert(!FD_ISSET(i, &set)); + } + + rv = pselect(nfds, NULL, &set, NULL, &timeout, NULL); + assert(rv == 0); + + for (i = 0; i < nfds; ++i) { + assert(!FD_ISSET(i, &set)); + } + + rv = pselect(nfds, NULL, NULL, &set, &timeout, NULL); + assert(rv == 0); + + for (i = 0; i < nfds; ++i) { + assert(!FD_ISSET(i, &set)); + } +} + +static void test_poll_timeout(test_context *ctx) { static const short events[] = { @@ -1199,6 +1256,9 @@ test_main(void) test_select_write(ctx); test_select_close(ctx); + test_pselect_sigmask(); + test_pselect_timeout(ctx); + test_poll_timeout(ctx); test_poll_connect(ctx); test_poll_read(ctx); |