chiark / gitweb /
tests: add test-socket-util
[elogind.git] / src / test / test-socket-util.c
1 /***
2   This file is part of systemd
3
4   Copyright 2014 Ronny Chevalier
5
6   systemd is free software; you can redistribute it and/or modify it
7   under the terms of the GNU Lesser General Public License as published by
8   the Free Software Foundation; either version 2.1 of the License, or
9   (at your option) any later version.
10
11   systemd is distributed in the hope that it will be useful, but
12   WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14   Lesser General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public License
17   along with systemd; If not, see <http://www.gnu.org/licenses/>.
18 ***/
19
20 #include "socket-util.h"
21 #include "util.h"
22 #include "macro.h"
23
24 static void test_socket_address_parse(void) {
25         SocketAddress a;
26
27         assert_se(socket_address_parse(&a, "junk") < 0);
28         assert_se(socket_address_parse(&a, "192.168.1.1") < 0);
29         assert_se(socket_address_parse(&a, ".168.1.1") < 0);
30         assert_se(socket_address_parse(&a, "989.168.1.1") < 0);
31         assert_se(socket_address_parse(&a, "192.168.1.1:65536") < 0);
32         assert_se(socket_address_parse(&a, "192.168.1.1:0") < 0);
33         assert_se(socket_address_parse(&a, "0") < 0);
34         assert_se(socket_address_parse(&a, "65536") < 0);
35
36         assert_se(socket_address_parse(&a, "65535") >= 0);
37
38         if (socket_ipv6_is_supported()) {
39                 assert_se(socket_address_parse(&a, "[::1]") < 0);
40                 assert_se(socket_address_parse(&a, "[::1]8888") < 0);
41                 assert_se(socket_address_parse(&a, "::1") < 0);
42                 assert_se(socket_address_parse(&a, "[::1]:0") < 0);
43                 assert_se(socket_address_parse(&a, "[::1]:65536") < 0);
44                 assert_se(socket_address_parse(&a, "[a:b:1]:8888") < 0);
45
46                 assert_se(socket_address_parse(&a, "8888") >= 0);
47                 assert_se(a.sockaddr.sa.sa_family == AF_INET6);
48
49                 assert_se(socket_address_parse(&a, "[2001:0db8:0000:85a3:0000:0000:ac1f:8001]:8888") >= 0);
50                 assert_se(a.sockaddr.sa.sa_family == AF_INET6);
51
52                 assert_se(socket_address_parse(&a, "[::1]:8888") >= 0);
53                 assert_se(a.sockaddr.sa.sa_family == AF_INET6);
54         } else {
55                 assert_se(socket_address_parse(&a, "[::1]:8888") < 0);
56
57                 assert_se(socket_address_parse(&a, "8888") >= 0);
58                 assert_se(a.sockaddr.sa.sa_family == AF_INET);
59         }
60
61         assert_se(socket_address_parse(&a, "192.168.1.254:8888") >= 0);
62         assert_se(a.sockaddr.sa.sa_family == AF_INET);
63
64         assert_se(socket_address_parse(&a, "/foo/bar") >= 0);
65         assert_se(a.sockaddr.sa.sa_family == AF_UNIX);
66
67         assert_se(socket_address_parse(&a, "@abstract") >= 0);
68         assert_se(a.sockaddr.sa.sa_family == AF_UNIX);
69 }
70
71 static void test_socket_address_parse_netlink(void) {
72         SocketAddress a;
73
74         assert_se(socket_address_parse_netlink(&a, "junk") < 0);
75         assert_se(socket_address_parse_netlink(&a, "") < 0);
76
77         assert_se(socket_address_parse_netlink(&a, "route") >= 0);
78         assert_se(socket_address_parse_netlink(&a, "route 10") >= 0);
79         assert_se(a.sockaddr.sa.sa_family == AF_NETLINK);
80         assert_se(a.protocol == NETLINK_ROUTE);
81 }
82
83 static void test_socket_address_equal(void) {
84         SocketAddress a;
85         SocketAddress b;
86
87         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
88         assert_se(socket_address_parse(&b, "192.168.1.1:888") >= 0);
89         assert_se(!socket_address_equal(&a, &b));
90
91         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
92         assert_se(socket_address_parse(&b, "192.16.1.1:8888") >= 0);
93         assert_se(!socket_address_equal(&a, &b));
94
95         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
96         assert_se(socket_address_parse(&b, "8888") >= 0);
97         assert_se(!socket_address_equal(&a, &b));
98
99         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
100         assert_se(socket_address_parse(&b, "/foo/bar/") >= 0);
101         assert_se(!socket_address_equal(&a, &b));
102
103         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
104         assert_se(socket_address_parse(&b, "192.168.1.1:8888") >= 0);
105         assert_se(socket_address_equal(&a, &b));
106
107         assert_se(socket_address_parse(&a, "/foo/bar") >= 0);
108         assert_se(socket_address_parse(&b, "/foo/bar") >= 0);
109         assert_se(socket_address_equal(&a, &b));
110
111         assert_se(socket_address_parse(&a, "[::1]:8888") >= 0);
112         assert_se(socket_address_parse(&b, "[::1]:8888") >= 0);
113         assert_se(socket_address_equal(&a, &b));
114
115         assert_se(socket_address_parse(&a, "@abstract") >= 0);
116         assert_se(socket_address_parse(&b, "@abstract") >= 0);
117         assert_se(socket_address_equal(&a, &b));
118
119         assert_se(socket_address_parse_netlink(&a, "firewall") >= 0);
120         assert_se(socket_address_parse_netlink(&b, "firewall") >= 0);
121         assert_se(socket_address_equal(&a, &b));
122 }
123
124 static void test_socket_address_get_path(void) {
125         SocketAddress a;
126
127         assert_se(socket_address_parse(&a, "192.168.1.1:8888") >= 0);
128         assert_se(!socket_address_get_path(&a));
129
130         assert_se(socket_address_parse(&a, "@abstract") >= 0);
131         assert_se(!socket_address_get_path(&a));
132
133         assert_se(socket_address_parse(&a, "[::1]:8888") >= 0);
134         assert_se(!socket_address_get_path(&a));
135
136         assert_se(socket_address_parse(&a, "/foo/bar") >= 0);
137         assert_se(streq(socket_address_get_path(&a), "/foo/bar"));
138 }
139
140 int main(int argc, char *argv[]) {
141         test_socket_address_parse();
142         test_socket_address_parse_netlink();
143         test_socket_address_equal();
144         test_socket_address_get_path();
145 }