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