Move MPTP ports to 16bit. Until now they were on 8bit.
[swifty.git] / src / kernel / test / test_socket.c
1 /*
2  * Test socket "syscall".
3  */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <sys/types.h>
9 #include <unistd.h>
10 #include <sys/socket.h>
11 #include <netinet/in.h>
12 #include <errno.h>
13
14 #include "swift_types.h"
15
16 #include "debug.h"
17 #include "util.h"
18
19 #include "test_sw.h"
20 #include "test.h"
21
22 static void socket_dummy(void);
23 static void socket_invalid_domain(void);
24 static void socket_invalid_type(void);
25 static void socket_invalid_protocol(void);
26 static void socket_insufficient_file_descriptors(void);
27 static void socket_ok(void);
28
29 void socket_test_suite(void)
30 {
31         start_suite();
32         socket_dummy();
33         socket_invalid_domain();
34         socket_invalid_type();
35         socket_invalid_protocol();
36         run_as_child_process(socket_insufficient_file_descriptors);
37         socket_ok();
38 }
39
40 /* Dummy function for testing purposes only. */
41 static void socket_dummy(void)
42 {
43         test(1 == 1);
44 }
45
46 /* Use invalid domain when calling socket. */
47 static void socket_invalid_domain(void)
48 {
49         int rc;
50
51         rc = socket(PF_UNIX, SOCK_DGRAM, IPPROTO_SWIFT);
52
53         test(rc < 0 && errno == EINVAL);
54 }
55
56 /* Use invalid type when calling socket. */
57 static void socket_invalid_type(void)
58 {
59         int rc;
60
61         rc = socket(PF_INET, SOCK_STREAM, IPPROTO_SWIFT);
62
63         test(rc < 0 && errno == EINVAL);
64 }
65
66 /* Use invalid protocol when calling socket. */
67 static void socket_invalid_protocol(void)
68 {
69         int rc;
70
71         rc = socket(PF_INET, SOCK_DGRAM, -1);
72
73         test(rc < 0 && errno == EINVAL);
74 }
75
76 /*
77  * Use dup to fill the number of file descriptors for current process.
78  * Calling socket must result in error.
79  *
80  * File descriptors are not closed. Test processes must be restarted.
81  */
82 static void socket_insufficient_file_descriptors(void)
83 {
84         int fd;
85         int rc;
86
87         while (1) {
88                 /* Duplicate standard output. */
89                 fd = dup(STDOUT_FILENO);
90                 if (fd < 0)
91                         break;
92         }
93
94         rc = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
95
96         dprintf("errno = %d\n", errno);
97         test(rc < 0 && errno == EMFILE);
98 }
99
100 /* Valid call of socket. */
101 static void socket_ok(void)
102 {
103         int rc;
104
105         rc = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
106         dprintf("rc = %d, errno = %d\n", rc, errno);
107
108         test(rc > 0);
109 }