2 * Test sw_socket "syscall".
10 #include <sys/socket.h>
11 #include <netinet/in.h>
14 #include "swift_raw.h"
15 #include "swift_types.h"
23 static void socket_dummy(void);
24 static void socket_invalid_domain(void);
25 static void socket_invalid_type(void);
26 static void socket_invalid_protocol(void);
27 static void socket_insufficient_file_descriptors(void);
28 static void socket_ok(void);
30 void socket_test_suite(void)
34 socket_invalid_domain();
35 socket_invalid_type();
36 socket_invalid_protocol();
37 socket_insufficient_file_descriptors();
41 /* Dummy function for testing purposes only. */
42 static void socket_dummy(void)
47 /* Use invalid domain when calling sw_socket. */
48 static void socket_invalid_domain(void)
52 rc = sw_socket(PF_UNIX, SOCK_DGRAM, IPPROTO_SWIFT);
54 test(rc < 0 && errno == EINVAL);
57 /* Use invalid type when calling sw_socket. */
58 static void socket_invalid_type(void)
62 rc = sw_socket(PF_INET, SOCK_STREAM, IPPROTO_SWIFT);
64 test(rc < 0 && errno == EINVAL);
67 /* Use invalid protocol when calling sw_socket. */
68 static void socket_invalid_protocol(void)
72 rc = sw_socket(PF_INET, SOCK_DGRAM, -1);
74 test(rc < 0 && errno == EINVAL);
78 * Use dup to fill the number of file descriptors for current process.
79 * Calling sw_socket must result in error.
81 * File descriptors are not closed. Test processes must be restarted.
83 static void socket_insufficient_file_descriptors(void)
89 /* Duplicate standard output. */
90 fd = dup(STDOUT_FILENO);
95 rc = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
97 dprintf("errno = %d\n", errno);
98 test(rc < 0 && errno == EMFILE);
101 /* Valid call of sw_socket. */
102 static void socket_ok(void)
106 rc = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
107 dprintf("rc = %d, errno = %d\n", rc, errno);