blob: 36d6932dfcd5e8771b3116d84e8525c3214ea977 [file] [log] [blame]
/*
* Copyright (c) 2020 Tobias Svehagen
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "_main.h"
ZTEST_F(eventfd, test_read_nonblock)
{
eventfd_t val = 0;
int ret;
reopen(&fixture->fd, 0, EFD_NONBLOCK);
ret = eventfd_read(fixture->fd, &val);
zassert_true(ret == -1, "read unset ret %d", ret);
zassert_true(errno == EAGAIN, "errno %d", errno);
ret = eventfd_write(fixture->fd, TESTVAL);
zassert_true(ret == 0, "write ret %d", ret);
ret = eventfd_read(fixture->fd, &val);
zassert_true(ret == 0, "read set ret %d", ret);
zassert_true(val == TESTVAL, "red set val %d", val);
ret = eventfd_read(fixture->fd, &val);
zassert_true(ret == -1, "read subsequent ret %d val %d", ret, val);
zassert_true(errno == EAGAIN, "errno %d", errno);
}
ZTEST_F(eventfd, test_set_poll_event_nonblock)
{
reopen(&fixture->fd, TESTVAL, EFD_NONBLOCK);
eventfd_poll_set_common(fixture->fd);
}
ZTEST_F(eventfd, test_unset_poll_event_nonblock)
{
reopen(&fixture->fd, 0, EFD_NONBLOCK);
eventfd_poll_unset_common(fixture->fd);
}
ZTEST_F(eventfd, test_overflow)
{
short event;
int ret;
reopen(&fixture->fd, 0, EFD_NONBLOCK);
event = POLLOUT;
ret = is_blocked(fixture->fd, &event);
zassert_equal(ret, 0, "eventfd write blocked with initval == 0");
ret = eventfd_write(fixture->fd, UINT64_MAX);
zassert_equal(ret, -1, "fd == %d", fixture->fd);
zassert_equal(errno, EINVAL, "did not get EINVAL");
ret = eventfd_write(fixture->fd, UINT64_MAX-1);
zassert_equal(ret, 0, "fd == %d", fixture->fd);
event = POLLOUT;
ret = is_blocked(fixture->fd, &event);
zassert_equal(ret, 1, "eventfd write not blocked with cnt == UINT64_MAX-1");
ret = eventfd_write(fixture->fd, 1);
zassert_equal(ret, -1, "fd == %d", fixture->fd);
zassert_equal(errno, EAGAIN, "did not get EINVAL");
}