Add sendTo tests
authorBogdan Drutu <bogdandrutu@gmail.com>
Sat, 4 Jun 2011 08:31:05 +0000 (11:31 +0300)
committerBogdan Drutu <bogdandrutu@gmail.com>
Sat, 4 Jun 2011 08:31:05 +0000 (11:31 +0300)
src/raw/test/test_sw_sendto.c

index 8cfa01c..fe6487d 100644 (file)
@@ -26,13 +26,95 @@ static void sendto_descriptor_is_not_socket(void);
 static void sendto_socket_is_not_bound(void);
 static void sendto_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 sendto_test_suite(void)
 {
        start_suite();
        sendto_dummy();
+
+       sendto_invalid_descriptor();
+       sendto_descriptor_is_not_socket();
+       sendto_socket_is_not_bound();
+       sendto_ok();
 }
 
 static void sendto_dummy(void)
 {
        test(1 == 1);
 }
+
+static void sendto_invalid_descriptor() 
+{
+       struct sockaddr_sw local_addr;
+       struct sockaddr_sw remote_addr;
+       ssize_t bytes_sent;
+       char buffer[BUFSIZ];
+
+       fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
+       bytes_sent = sw_sendto(-1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
+
+       test(bytes_sent < 0 && errno == EBADF);
+}
+
+static void sendto_descriptor_is_not_socket(void)
+{
+       struct sockaddr_sw local_addr;
+       struct sockaddr_sw remote_addr;
+       ssize_t bytes_sent;
+       char buffer[BUFSIZ];
+
+       fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
+       bytes_sent = sw_sendto(1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
+
+       test(bytes_sent < 0 && errno == ENOTSOCK);
+}
+
+static void sendto_socket_is_not_bound(void)
+{
+       int sockfd;
+       struct sockaddr_sw local_addr;
+       struct sockaddr_sw remote_addr;
+       ssize_t bytes_sent;
+       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_sent = sw_sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
+
+       test( bytes_sent < 0 && errno == EAFNOSUPPORT );
+}
+
+static void sendto_ok(void) 
+{
+       int sockfd;
+       struct sockaddr_sw local_addr;
+       struct sockaddr_sw remote_addr;
+       ssize_t bytes_sent;
+       char buffer[BUFSIZ];
+       int rc;
+
+       fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
+
+
+       sockfd = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
+       DIE(sockfd < 0, "sw_socket");
+
+       rc = sw_bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
+       DIE(rc < 0, "sw_bind");
+
+       
+       test( 1 == 0 );
+}
+
+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));
+}