More bind error tests

This commit is contained in:
Bert Belder 2011-04-26 03:48:08 +02:00
parent 2047413488
commit a6430f4121
3 changed files with 142 additions and 0 deletions

1
oio.h
View File

@ -69,6 +69,7 @@ typedef enum {
OIO_ECONNREFUSED,
OIO_ECONNRESET,
OIO_EDESTADDRREQ,
OIO_EFAULT,
OIO_EHOSTUNREACH,
OIO_EINTR,
OIO_EINVAL,

View File

@ -36,6 +36,32 @@ static void close_cb(oio_handle* handle, int status) {
}
TEST_IMPL(bind_error_access) {
struct sockaddr_in addr = oio_ip4_addr("255.255.255.255", TEST_PORT);
oio_handle server;
int r;
oio_init();
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &addr);
ASSERT(r == 0);
r = oio_listen(&server, 128, NULL);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EACCESS);
oio_close(&server);
oio_run();
ASSERT(close_cb_called == 1);
return 0;
}
TEST_IMPL(bind_error_addrinuse) {
struct sockaddr_in addr = oio_ip4_addr("0.0.0.0", TEST_PORT);
oio_handle server1, server2;
@ -69,3 +95,103 @@ TEST_IMPL(bind_error_addrinuse) {
return 0;
}
TEST_IMPL(bind_error_addrnotavail) {
struct sockaddr_in addr = oio_ip4_addr("4.4.4.4", TEST_PORT);
oio_handle server;
int r;
oio_init();
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &addr);
ASSERT(r == 0);
r = oio_listen(&server, 128, NULL);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EADDRNOTAVAIL);
oio_close(&server);
oio_run();
ASSERT(close_cb_called == 1);
return 0;
}
TEST_IMPL(bind_error_fault_1) {
char garbage[] = "blah blah blah blah blah blah blah blah blah blah blah blah";
oio_handle server;
int r;
oio_init();
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &garbage);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EFAULT);
oio_close(&server);
oio_run();
ASSERT(close_cb_called == 1);
return 0;
}
TEST_IMPL(bind_error_fault_2) {
oio_handle server;
int r;
oio_init();
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) NULL);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EFAULT);
oio_close(&server);
oio_run();
ASSERT(close_cb_called == 1);
return 0;
}
TEST_IMPL(bind_error_inval) {
struct sockaddr_in addr1 = oio_ip4_addr("0.0.0.0", TEST_PORT);
struct sockaddr_in addr2 = oio_ip4_addr("0.0.0.0", TEST_PORT_2);
oio_handle server;
int r;
oio_init();
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &addr1);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &addr2);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EINVAL);
oio_close(&server);
oio_run();
ASSERT(close_cb_called == 1);
return 0;
}

View File

@ -22,7 +22,12 @@
TEST_DECLARE (ping_pong)
TEST_DECLARE (delayed_accept)
TEST_DECLARE (tcp_writealot)
TEST_DECLARE (bind_error_access)
TEST_DECLARE (bind_error_addrinuse)
TEST_DECLARE (bind_error_addrnotavail)
TEST_DECLARE (bind_error_fault_1)
TEST_DECLARE (bind_error_fault_2)
TEST_DECLARE (bind_error_inval)
TEST_DECLARE (connection_fail)
TEST_DECLARE (close_cb_stack)
TEST_DECLARE (timeout)
@ -41,8 +46,18 @@ TASK_LIST_START
TEST_HELPER (tcp_writealot, echo_server)
*/
TEST_ENTRY (bind_error_access)
TEST_ENTRY (bind_error_addrinuse)
TEST_ENTRY (bind_error_addrnotavail)
TEST_ENTRY (bind_error_fault_1)
TEST_ENTRY (bind_error_fault_2)
TEST_ENTRY (bind_error_inval)
TEST_ENTRY (connection_fail)
TEST_ENTRY (close_cb_stack)