From 24ae64e042cf5b106b26c2c8e81550b06f63a518 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Thu, 7 Dec 2017 19:09:35 +0100 Subject: [PATCH] test: add more test cases to test-error --- test/test-error.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/test/test-error.c b/test/test-error.c index 28462dc..b15cff9 100644 --- a/test/test-error.c +++ b/test/test-error.c @@ -52,8 +52,8 @@ int main(void) { { /* Test epoll_ctl() errors. */ - /* TODO: incomplete. */ HANDLE valid_ephnd; + SOCKET sock_valid; SOCKET sock_bad = (SOCKET) 0xbadbad; SOCKET sock_nonsock = (SOCKET) bad_type; struct epoll_event ev; @@ -62,9 +62,22 @@ int main(void) { valid_ephnd = epoll_create1(0); check(valid_ephnd != NULL); + sock_valid = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + check(sock_valid != INVALID_SOCKET); + ev.data.u64 = 0; ev.events = 0; + /* Invalid `ephnd` */ + r = epoll_ctl(NULL, EPOLL_CTL_ADD, sock_valid, &ev); + check_error(r < 0, EBADF, ERROR_INVALID_HANDLE); + r = epoll_ctl(INVALID_HANDLE_VALUE, EPOLL_CTL_ADD, sock_valid, &ev); + check_error(r < 0, EBADF, ERROR_INVALID_HANDLE); + r = epoll_ctl(bad_value, EPOLL_CTL_ADD, sock_valid, &ev); + check_error(r < 0, EBADF, ERROR_INVALID_HANDLE); + r = epoll_ctl(bad_type, EPOLL_CTL_ADD, sock_valid, &ev); + check_error(r < 0, EINVAL, ERROR_INVALID_PARAMETER); + /* Invalid `sock` */ r = epoll_ctl(valid_ephnd, EPOLL_CTL_ADD, 0, &ev); check_error(r < 0, EBADF, ERROR_INVALID_HANDLE); @@ -75,6 +88,23 @@ int main(void) { r = epoll_ctl(valid_ephnd, EPOLL_CTL_ADD, sock_nonsock, &ev); check_error(r < 0, ENOTSOCK, WSAENOTSOCK); + /* Invalid `op` */ + r = epoll_ctl(valid_ephnd, -1, sock_valid, &ev); + check_error(r < 0, EINVAL, ERROR_INVALID_PARAMETER); + r = epoll_ctl(valid_ephnd, 0, sock_valid, &ev); + check_error(r < 0, EINVAL, ERROR_INVALID_PARAMETER); + r = epoll_ctl(valid_ephnd, 4, sock_valid, &ev); + check_error(r < 0, EINVAL, ERROR_INVALID_PARAMETER); + + /* Precedence - `EBADF` before `EINVAL`. */ + r = epoll_ctl(INVALID_HANDLE_VALUE, -1, sock_valid, &ev); + check_error(r < 0, EBADF, ERROR_INVALID_HANDLE); + r = epoll_ctl(valid_ephnd, -1, INVALID_SOCKET, &ev); + check_error(r < 0, EBADF, ERROR_INVALID_HANDLE); + /* TODO: bad `ephnd` type with invalid `sock`. */ + + r = closesocket(sock_valid); + check(r == 0); r = epoll_close(valid_ephnd); check(r == 0); }