From 83178cfa7b8bec5da4a61da9d926679d54cccaf7 Mon Sep 17 00:00:00 2001 From: Razvan Deaconescu Date: Sat, 21 May 2011 20:14:02 +0300 Subject: [PATCH] raw: Add test functions for sw_close. --- src/raw/test/test_sw_close.c | 65 +++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/raw/test/test_sw_close.c b/src/raw/test/test_sw_close.c index a0f83bc..f6b0f03 100644 --- a/src/raw/test/test_sw_close.c +++ b/src/raw/test/test_sw_close.c @@ -23,13 +23,17 @@ static void close_dummy(void); static void close_invalid_descriptor(void); static void close_descriptor_is_not_a_socket(void); -static void close_ok_descriptor_is_bound(void); static void close_ok_descriptor_is_not_bound(void); +static void close_ok_descriptor_is_bound(void); void close_test_suite(void) { start_suite(); close_dummy(); + close_invalid_descriptor(); + close_descriptor_is_not_a_socket(); + close_ok_descriptor_is_not_bound(); + close_ok_descriptor_is_bound(); } static void close_dummy(void) @@ -37,3 +41,62 @@ static void close_dummy(void) test(1 == 1); } +/* Pass invalid file descriptor to sw_close. */ +static void close_invalid_descriptor(void) +{ + int rc; + + rc = sw_close(-1); + + test(rc < 0 && errno == EBADF); +} + +/* Pass a duplicate of standard output to sw_close. */ +static void close_descriptor_is_not_a_socket(void) +{ + int fd; + int rc; + + fd = dup(STDOUT_FILENO); + DIE(fd < 0, "dup"); + + rc = sw_close(fd); + + test(rc < 0 && errno == EBADF); + + close(fd); +} + +/* Pass a non-bound socket. */ +static void close_ok_descriptor_is_not_bound(void) +{ + int s; + int rc; + + s = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT); + DIE(s < 0, "sw_socket"); + + rc = sw_close(s); + + test(rc == 0); +} + +/* Pass a bound socket. */ +static void close_ok_descriptor_is_bound(void) +{ + int s; + int rc; + struct sockaddr_sw addr; + + s = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT); + DIE(s < 0, "sw_socket"); + + /* TODO: Initialize bind address. */ + + rc = sw_bind(s, (struct sockaddr *) &addr, sizeof(addr)); + DIE(rc < 0, "sw_bind"); + + rc = sw_close(s); + + test(rc == 0); +} -- 2.20.1