Move MPTP ports to 16bit. Until now they were on 8bit.
[swifty.git] / src / kernel / test / test_close.c
1 /*
2  * Test close "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 close_dummy(void);
23 static void close_invalid_descriptor(void);
24 static void close_descriptor_is_not_a_socket(void);
25 static void close_ok_descriptor_is_not_bound(void);
26 static void close_ok_descriptor_is_bound(void);
27
28 void close_test_suite(void)
29 {
30         start_suite();
31         close_dummy();
32         close_invalid_descriptor();
33         close_descriptor_is_not_a_socket();
34         close_ok_descriptor_is_not_bound();
35         close_ok_descriptor_is_bound();
36 }
37
38 static void close_dummy(void)
39 {
40         test(1 == 1);
41 }
42
43 /* Pass invalid file descriptor to close. */
44 static void close_invalid_descriptor(void)
45 {
46         int rc;
47
48         rc = close(-1);
49
50         test(rc < 0 && errno == EBADF);
51 }
52
53 /* Pass a duplicate of standard output to close. */
54 static void close_descriptor_is_not_a_socket(void)
55 {
56         int fd;
57         int rc;
58
59         fd = dup(STDOUT_FILENO);
60         DIE(fd < 0, "dup");
61
62         rc = close(fd);
63
64         test(rc < 0 && errno == EBADF);
65
66         close(fd);
67 }
68
69 /* Pass a non-bound socket. */
70 static void close_ok_descriptor_is_not_bound(void)
71 {
72         int s;
73         int rc;
74
75         s = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
76         DIE(s < 0, "socket");
77
78         rc = close(s);
79
80         test(rc == 0);
81 }
82
83 /* Pass a bound socket. */
84 static void close_ok_descriptor_is_bound(void)
85 {
86         int s;
87         int rc;
88         struct sockaddr_sw addr;
89
90         s = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
91         DIE(s < 0, "socket");
92
93         memset(&addr, 0, sizeof(addr));
94         addr.sin_family = AF_INET;
95         addr.sin_addr.s_addr = INADDR_ANY;
96         rc = bind(s, (struct sockaddr *) &addr, sizeof(addr));
97         DIE(rc < 0, "bind");
98
99         rc = close(s);
100
101         test(rc == 0);
102 }