Commit 71714178 authored by Marc-André Lureau's avatar Marc-André Lureau
Browse files

tests: specify the address family when checking bind



getaddrinfo() may succeed with PF_UNSPEC, but fail when more specific.

(this allows to skip some tests that would fail under podman)

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
parent 05af039d
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -30,7 +30,16 @@
# define EAI_ADDRFAMILY 0
#endif

int socket_can_bind_connect(const char *hostname)
/*
 * @hostname: a DNS name or numeric IP address
 *
 * Check whether it is possible to bind & connect to ports
 * on the DNS name or IP address @hostname. If an IP address
 * is used, it must not be a wildcard address.
 *
 * Returns 0 on success, -1 on error with errno set
 */
static int socket_can_bind_connect(const char *hostname, int family)
{
    int lfd = -1, cfd = -1, afd = -1;
    struct addrinfo ai, *res = NULL;
@@ -44,7 +53,7 @@ int socket_can_bind_connect(const char *hostname)

    memset(&ai, 0, sizeof(ai));
    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
    ai.ai_family = AF_UNSPEC;
    ai.ai_family = family;
    ai.ai_socktype = SOCK_STREAM;

    /* lookup */
@@ -129,7 +138,7 @@ int socket_check_protocol_support(bool *has_ipv4, bool *has_ipv6)
{
    *has_ipv4 = *has_ipv6 = false;

    if (socket_can_bind_connect("127.0.0.1") < 0) {
    if (socket_can_bind_connect("127.0.0.1", PF_INET) < 0) {
        if (errno != EADDRNOTAVAIL) {
            return -1;
        }
@@ -137,7 +146,7 @@ int socket_check_protocol_support(bool *has_ipv4, bool *has_ipv6)
        *has_ipv4 = true;
    }

    if (socket_can_bind_connect("::1") < 0) {
    if (socket_can_bind_connect("::1", PF_INET6) < 0) {
        if (errno != EADDRNOTAVAIL) {
            return -1;
        }
+0 −11
Original line number Diff line number Diff line
@@ -20,17 +20,6 @@
#ifndef TESTS_SOCKET_HELPERS_H
#define TESTS_SOCKET_HELPERS_H

/*
 * @hostname: a DNS name or numeric IP address
 *
 * Check whether it is possible to bind & connect to ports
 * on the DNS name or IP address @hostname. If an IP address
 * is used, it must not be a wildcard address.
 *
 * Returns 0 on success, -1 on error with errno set
 */
int socket_can_bind_connect(const char *hostname);

/*
 * @has_ipv4: set to true on return if IPv4 is available
 * @has_ipv6: set to true on return if IPv6 is available