2 * Test sw_close "syscall".
10 #include <sys/socket.h>
11 #include <netinet/in.h>
14 #include "swift_raw.h"
15 #include "swift_types.h"
23 static void close_dummy(void);
24 static void close_invalid_descriptor(void);
25 static void close_descriptor_is_not_a_socket(void);
26 static void close_ok_descriptor_is_not_bound(void);
27 static void close_ok_descriptor_is_bound(void);
29 void close_test_suite(void)
33 close_invalid_descriptor();
34 close_descriptor_is_not_a_socket();
35 close_ok_descriptor_is_not_bound();
36 close_ok_descriptor_is_bound();
39 static void close_dummy(void)
44 /* Pass invalid file descriptor to sw_close. */
45 static void close_invalid_descriptor(void)
51 test(rc < 0 && errno == EBADF);
54 /* Pass a duplicate of standard output to sw_close. */
55 static void close_descriptor_is_not_a_socket(void)
60 fd = dup(STDOUT_FILENO);
65 test(rc < 0 && errno == EBADF);
70 /* Pass a non-bound socket. */
71 static void close_ok_descriptor_is_not_bound(void)
76 s = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
77 DIE(s < 0, "sw_socket");
84 /* Pass a bound socket. */
85 static void close_ok_descriptor_is_bound(void)
89 struct sockaddr_sw addr;
91 s = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
92 DIE(s < 0, "sw_socket");
94 /* TODO: Initialize bind address. */
96 rc = sw_bind(s, (struct sockaddr *) &addr, sizeof(addr));
97 DIE(rc < 0, "sw_bind");