2 * Test sw_sendto "syscall".
10 #include <sys/socket.h>
11 #include <netinet/in.h>
14 #include "swift_raw.h"
15 #include "swift_types.h"
23 static void sendto_dummy(void);
24 static void sendto_invalid_descriptor(void);
25 static void sendto_descriptor_is_not_socket(void);
26 static void sendto_socket_is_not_bound(void);
27 static void sendto_ok(void);
29 // Additional function
30 static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address);
32 void sendto_test_suite(void)
37 sendto_invalid_descriptor();
38 sendto_descriptor_is_not_socket();
39 sendto_socket_is_not_bound();
43 static void sendto_dummy(void)
48 static void sendto_invalid_descriptor()
50 struct sockaddr_sw local_addr;
51 struct sockaddr_sw remote_addr;
55 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
56 bytes_sent = sw_sendto(-1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
58 test(bytes_sent < 0 && errno == EBADF);
61 static void sendto_descriptor_is_not_socket(void)
63 struct sockaddr_sw local_addr;
64 struct sockaddr_sw remote_addr;
68 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
69 bytes_sent = sw_sendto(1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
71 test(bytes_sent < 0 && errno == ENOTSOCK);
74 static void sendto_socket_is_not_bound(void)
77 struct sockaddr_sw local_addr;
78 struct sockaddr_sw remote_addr;
82 sockfd = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
83 DIE(sockfd < 0, "sw_socket");
85 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
86 bytes_sent = sw_sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
88 test( bytes_sent < 0 && errno == EAFNOSUPPORT );
91 static void sendto_ok(void)
94 struct sockaddr_sw local_addr;
95 struct sockaddr_sw remote_addr;
100 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
102 sockfd = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
103 DIE(sockfd < 0, "sw_socket");
105 rc = sw_bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
106 DIE(rc < 0, "sw_bind");
108 bytes_sent = sw_sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
111 test( bytes_sent >= 0 );
115 static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address)
117 inet_pton(PF_INET, local_address, &(local_addr->sin_addr));
118 memcpy(&local_addr->sw_hash, hash, sizeof(struct sw_hash));
120 inet_pton(PF_INET, dest_address, &(remote_addr->sin_addr));
121 memcpy(&remote_addr->sw_hash, hash, sizeof(struct sw_hash));