xref: /qemu/tests/unit/test-util-sockets.c (revision 58dc31f1a7dc6cd0f21bd51a34011ba366d36e53)
1*58dc31f1SDaniel P. Berrange /*
2*58dc31f1SDaniel P. Berrange  * Tests for util/qemu-sockets.c
3*58dc31f1SDaniel P. Berrange  *
4*58dc31f1SDaniel P. Berrange  * Copyright 2018 Red Hat, Inc.
5*58dc31f1SDaniel P. Berrange  *
6*58dc31f1SDaniel P. Berrange  * This program is free software; you can redistribute it and/or modify
7*58dc31f1SDaniel P. Berrange  * it under the terms of the GNU General Public License as published by
8*58dc31f1SDaniel P. Berrange  * the Free Software Foundation; either version 2 of the License, or
9*58dc31f1SDaniel P. Berrange  * (at your option) any later version.
10*58dc31f1SDaniel P. Berrange  *
11*58dc31f1SDaniel P. Berrange  * This program is distributed in the hope that it will be useful,
12*58dc31f1SDaniel P. Berrange  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*58dc31f1SDaniel P. Berrange  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*58dc31f1SDaniel P. Berrange  * GNU General Public License for more details.
15*58dc31f1SDaniel P. Berrange  *
16*58dc31f1SDaniel P. Berrange  * You should have received a copy of the GNU General Public License
17*58dc31f1SDaniel P. Berrange  * along with this library; if not, see <http://www.gnu.org/licenses/>.
18*58dc31f1SDaniel P. Berrange  *
19*58dc31f1SDaniel P. Berrange  */
20*58dc31f1SDaniel P. Berrange 
21*58dc31f1SDaniel P. Berrange #include "qemu/osdep.h"
22*58dc31f1SDaniel P. Berrange #include "qemu-common.h"
23*58dc31f1SDaniel P. Berrange #include "qemu/sockets.h"
24*58dc31f1SDaniel P. Berrange #include "qapi/error.h"
25*58dc31f1SDaniel P. Berrange #include "socket-helpers.h"
26*58dc31f1SDaniel P. Berrange 
27*58dc31f1SDaniel P. Berrange static void test_fd_is_socket_bad(void)
28*58dc31f1SDaniel P. Berrange {
29*58dc31f1SDaniel P. Berrange     char *tmp = g_strdup("qemu-test-util-sockets-XXXXXX");
30*58dc31f1SDaniel P. Berrange     int fd = mkstemp(tmp);
31*58dc31f1SDaniel P. Berrange     if (fd != 0) {
32*58dc31f1SDaniel P. Berrange         unlink(tmp);
33*58dc31f1SDaniel P. Berrange     }
34*58dc31f1SDaniel P. Berrange     g_free(tmp);
35*58dc31f1SDaniel P. Berrange 
36*58dc31f1SDaniel P. Berrange     g_assert(fd >= 0);
37*58dc31f1SDaniel P. Berrange 
38*58dc31f1SDaniel P. Berrange     g_assert(!fd_is_socket(fd));
39*58dc31f1SDaniel P. Berrange     close(fd);
40*58dc31f1SDaniel P. Berrange }
41*58dc31f1SDaniel P. Berrange 
42*58dc31f1SDaniel P. Berrange static void test_fd_is_socket_good(void)
43*58dc31f1SDaniel P. Berrange {
44*58dc31f1SDaniel P. Berrange     int fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
45*58dc31f1SDaniel P. Berrange 
46*58dc31f1SDaniel P. Berrange     g_assert(fd >= 0);
47*58dc31f1SDaniel P. Berrange 
48*58dc31f1SDaniel P. Berrange     g_assert(fd_is_socket(fd));
49*58dc31f1SDaniel P. Berrange     close(fd);
50*58dc31f1SDaniel P. Berrange }
51*58dc31f1SDaniel P. Berrange 
52*58dc31f1SDaniel P. Berrange int main(int argc, char **argv)
53*58dc31f1SDaniel P. Berrange {
54*58dc31f1SDaniel P. Berrange     bool has_ipv4, has_ipv6;
55*58dc31f1SDaniel P. Berrange 
56*58dc31f1SDaniel P. Berrange     socket_init();
57*58dc31f1SDaniel P. Berrange 
58*58dc31f1SDaniel P. Berrange     g_test_init(&argc, &argv, NULL);
59*58dc31f1SDaniel P. Berrange 
60*58dc31f1SDaniel P. Berrange     /* We're creating actual IPv4/6 sockets, so we should
61*58dc31f1SDaniel P. Berrange      * check if the host running tests actually supports
62*58dc31f1SDaniel P. Berrange      * each protocol to avoid breaking tests on machines
63*58dc31f1SDaniel P. Berrange      * with either IPv4 or IPv6 disabled.
64*58dc31f1SDaniel P. Berrange      */
65*58dc31f1SDaniel P. Berrange     if (socket_check_protocol_support(&has_ipv4, &has_ipv6) < 0) {
66*58dc31f1SDaniel P. Berrange         return 1;
67*58dc31f1SDaniel P. Berrange     }
68*58dc31f1SDaniel P. Berrange 
69*58dc31f1SDaniel P. Berrange     if (has_ipv4) {
70*58dc31f1SDaniel P. Berrange         g_test_add_func("/util/socket/is-socket/bad",
71*58dc31f1SDaniel P. Berrange                         test_fd_is_socket_bad);
72*58dc31f1SDaniel P. Berrange         g_test_add_func("/util/socket/is-socket/good",
73*58dc31f1SDaniel P. Berrange                         test_fd_is_socket_good);
74*58dc31f1SDaniel P. Berrange     }
75*58dc31f1SDaniel P. Berrange 
76*58dc31f1SDaniel P. Berrange     return g_test_run();
77*58dc31f1SDaniel P. Berrange }
78