From c702f8c9f2b5589eead01cf66a07130070306234 Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Sat, 4 Jun 2011 11:57:42 +0300 Subject: [PATCH] Add 3 tests for recvfrom --- src/raw/test/test_sw_recvfrom.c | 69 +++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/raw/test/test_sw_recvfrom.c b/src/raw/test/test_sw_recvfrom.c index 833d4ff..c2138b7 100644 --- a/src/raw/test/test_sw_recvfrom.c +++ b/src/raw/test/test_sw_recvfrom.c @@ -27,10 +27,18 @@ static void recvfrom_socket_is_not_bound(void); static void recvfrom_after_sendto_ok(void); static void recvfrom_after_sendmsg_ok(void); +// Additional function +static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address); + void recvfrom_test_suite(void) { start_suite(); recvfrom_dummy(); + recvfrom_invalid_descriptor(); + recvfrom_descriptor_is_not_a_socket(); + recvfrom_socket_is_not_bound(); + recvfrom_after_sendto_ok(); + recvfrom_after_sendmsg_ok(); } static void recvfrom_dummy(void) @@ -38,3 +46,64 @@ static void recvfrom_dummy(void) test(1 == 1); } +static void recvfrom_invalid_descriptor(void) +{ + struct sockaddr_sw local_addr; + struct sockaddr_sw remote_addr; + ssize_t bytes_recv; + char buffer[BUFSIZ]; + + fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1"); + bytes_recv = sw_recvfrom(-1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr)); + + test(bytes_recv < 0 && errno == EBADF); +} + +static void recvfrom_descriptor_is_not_a_socket(void) +{ + struct sockaddr_sw local_addr; + struct sockaddr_sw remote_addr; + ssize_t bytes_recv; + char buffer[BUFSIZ]; + + fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1"); + bytes_recv = sw_recvfrom(1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr)); + + test(bytes_recv < 0 && errno == ENOTSOCK); +} + +static void recvfrom_socket_is_not_bound(void) +{ + int sockfd; + struct sockaddr_sw local_addr; + struct sockaddr_sw remote_addr; + ssize_t bytes_recv; + char buffer[BUFSIZ]; + + sockfd = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT); + DIE(sockfd < 0, "sw_socket"); + + fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1"); + bytes_recv = sw_recvfrom(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr)); + + test( bytes_recv < 0 && errno == EAFNOSUPPORT ); +} + +static void recvfrom_after_sendto_ok(void) +{ + test ( 0 == 1 ); +} + +static void recvfrom_after_sendmsg_ok(void) +{ + test ( 0 == 1 ); +} + +static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address) +{ + local_addr->sin_addr.s_addr = htonl((int)local_address); + memcpy(&local_addr->sw_hash, hash, sizeof(struct sw_hash)); + + remote_addr->sin_addr.s_addr = htonl((int)dest_address); + memcpy(&remote_addr->sw_hash, hash, sizeof(struct sw_hash)); +} -- 2.20.1