12 #include <sys/socket.h>
13 #include <netinet/in.h>
14 #include <arpa/inet.h>
17 static void test_nwrap_getnameinfo(void **state)
21 struct sockaddr_in sin;
22 struct sockaddr_in6 sin6;
26 (void) state; /* unused */
29 sin.sin_family = AF_INET;
30 sin.sin_port = htons(53);
31 rc = inet_pton(AF_INET, "127.0.0.11", &sin.sin_addr);
32 assert_int_equal(rc, 1);
34 rc = getnameinfo((const struct sockaddr *)&sin,
35 sizeof(struct sockaddr_in),
39 assert_int_equal(rc, 0);
41 assert_string_equal(host, "magrathea.galaxy.site");
42 assert_string_equal(serv, "domain");
45 sin6.sin6_family = AF_INET6;
46 sin6.sin6_port = htons(53);
47 rc = inet_pton(AF_INET6, "::13", &sin6.sin6_addr);
48 assert_int_equal(rc, 1);
50 rc = getnameinfo((const struct sockaddr *)&sin6,
51 sizeof(struct sockaddr_in6),
55 assert_int_equal(rc, 0);
57 assert_string_equal(host, "beteigeuze.galaxy.site");
58 assert_string_equal(serv, "domain");
61 static void test_nwrap_getnameinfo_numeric(void **state)
65 struct sockaddr_in sin;
66 struct sockaddr_in6 sin6;
70 (void) state; /* unused */
73 sin.sin_family = AF_INET;
74 sin.sin_port = htons(53);
75 rc = inet_pton(AF_INET, "127.0.0.11", &sin.sin_addr);
76 assert_int_equal(rc, 1);
78 flags = NI_NUMERICHOST;
80 rc = getnameinfo((const struct sockaddr *)&sin,
81 sizeof(struct sockaddr_in),
85 assert_int_equal(rc, 0);
87 assert_string_equal(host, "127.0.0.11");
88 assert_string_equal(serv, "domain");
91 sin6.sin6_family = AF_INET6;
92 sin6.sin6_port = htons(53);
93 rc = inet_pton(AF_INET6, "::13", &sin6.sin6_addr);
94 assert_int_equal(rc, 1);
96 flags = NI_NUMERICSERV;
98 rc = getnameinfo((const struct sockaddr *)&sin6,
99 sizeof(struct sockaddr_in6),
103 assert_int_equal(rc, 0);
105 assert_string_equal(host, "beteigeuze.galaxy.site");
106 assert_string_equal(serv, "53");
109 static void test_nwrap_getnameinfo_any(void **state)
111 char host[256] = {0};
112 char serv[256] = {0};
113 struct sockaddr_in sin;
114 struct sockaddr_in6 sin6;
118 (void) state; /* unused */
121 sin.sin_family = AF_INET;
122 sin.sin_port = htons(22);
123 rc = inet_pton(AF_INET, "0.0.0.0", &sin.sin_addr);
124 assert_int_equal(rc, 1);
126 rc = getnameinfo((const struct sockaddr *)&sin,
127 sizeof(struct sockaddr_in),
131 assert_int_equal(rc, 0);
133 assert_string_equal(host, "0.0.0.0");
134 assert_string_equal(serv, "ssh");
137 sin6.sin6_family = AF_INET6;
138 sin6.sin6_port = htons(22);
139 rc = inet_pton(AF_INET6, "::", &sin6.sin6_addr);
140 assert_int_equal(rc, 1);
142 rc = getnameinfo((const struct sockaddr *)&sin6,
143 sizeof(struct sockaddr_in6),
147 assert_int_equal(rc, 0);
149 assert_string_equal(host, "::");
150 assert_string_equal(serv, "ssh");
153 static void test_nwrap_getnameinfo_local(void **state)
155 char host[256] = {0};
156 char serv[256] = {0};
157 struct sockaddr_in sin;
158 struct sockaddr_in6 sin6;
162 (void) state; /* unused */
165 sin.sin_family = AF_INET;
166 sin.sin_port = htons(22);
167 rc = inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr);
168 assert_int_equal(rc, 1);
170 rc = getnameinfo((const struct sockaddr *)&sin,
171 sizeof(struct sockaddr_in),
175 assert_int_equal(rc, 0);
177 assert_string_equal(host, "127.0.0.1");
178 assert_string_equal(serv, "ssh");
181 sin6.sin6_family = AF_INET6;
182 sin6.sin6_port = htons(22);
183 rc = inet_pton(AF_INET6, "::1", &sin6.sin6_addr);
184 assert_int_equal(rc, 1);
186 rc = getnameinfo((const struct sockaddr *)&sin6,
187 sizeof(struct sockaddr_in6),
191 assert_int_equal(rc, 0);
193 assert_string_equal(host, "::1");
194 assert_string_equal(serv, "ssh");
197 static void test_nwrap_getnameinfo_null(void **state)
199 char host[256] = {0};
200 char serv[256] = {0};
201 struct sockaddr_in sin;
202 struct sockaddr_in6 sin6;
206 (void) state; /* unused */
208 rc = getnameinfo(NULL,
213 assert_int_equal(rc, EAI_FAMILY);
216 sin.sin_family = AF_INET;
217 sin.sin_port = htons(22);
218 rc = inet_pton(AF_INET, "127.0.0.11", &sin.sin_addr);
219 assert_int_equal(rc, 1);
221 rc = getnameinfo((const struct sockaddr *)&sin,
222 sizeof(struct sockaddr_in),
226 assert_int_equal(rc, 0);
228 assert_string_equal(serv, "ssh");
231 sin6.sin6_family = AF_INET6;
232 sin6.sin6_port = htons(22);
233 rc = inet_pton(AF_INET6, "::13", &sin6.sin6_addr);
234 assert_int_equal(rc, 1);
236 rc = getnameinfo((const struct sockaddr *)&sin6,
237 sizeof(struct sockaddr_in6),
241 assert_int_equal(rc, 0);
243 assert_string_equal(host, "beteigeuze.galaxy.site");
246 sin6.sin6_family = AF_INET6;
247 sin6.sin6_port = htons(22);
248 rc = inet_pton(AF_INET6, "::13", &sin6.sin6_addr);
249 assert_int_equal(rc, 1);
251 rc = getnameinfo((const struct sockaddr *)&sin6,
252 sizeof(struct sockaddr_in6),
256 assert_int_equal(rc, 0);
258 assert_string_equal(host, "beteigeuze.galaxy.site");
261 static void test_nwrap_getnameinfo_flags(void **state)
263 char host[256] = {0};
264 char serv[256] = {0};
265 struct sockaddr_in sin;
269 (void) state; /* unused */
272 sin.sin_family = AF_INET;
273 sin.sin_port = htons(22);
274 rc = inet_pton(AF_INET, "127.0.0.11", &sin.sin_addr);
275 assert_int_equal(rc, 1);
279 rc = getnameinfo((const struct sockaddr *)&sin,
280 sizeof(struct sockaddr_in),
284 assert_int_equal(rc, EAI_NONAME);
287 sin.sin_family = AF_INET;
288 sin.sin_port = htons(513);
289 rc = inet_pton(AF_INET, "127.0.0.11", &sin.sin_addr);
290 assert_int_equal(rc, 1);
294 rc = getnameinfo((const struct sockaddr *)&sin,
295 sizeof(struct sockaddr_in),
299 assert_int_equal(rc, 0);
301 assert_string_equal(serv, "who");
303 /* STREAM (port 513) */
306 rc = getnameinfo((const struct sockaddr *)&sin,
307 sizeof(struct sockaddr_in),
311 assert_int_equal(rc, 0);
313 assert_string_equal(serv, "login");
318 rc = getnameinfo((const struct sockaddr *)&sin,
319 sizeof(struct sockaddr_in),
323 assert_int_equal(rc, 0);
325 assert_string_equal(host, "magrathea");
331 const struct CMUnitTest tests[] = {
332 cmocka_unit_test(test_nwrap_getnameinfo),
333 cmocka_unit_test(test_nwrap_getnameinfo_numeric),
334 cmocka_unit_test(test_nwrap_getnameinfo_any),
335 cmocka_unit_test(test_nwrap_getnameinfo_local),
336 cmocka_unit_test(test_nwrap_getnameinfo_null),
337 cmocka_unit_test(test_nwrap_getnameinfo_flags),
340 rc = cmocka_run_group_tests(tests, NULL, NULL);