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: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Marc-André Lureau 2019-07-09 18:12:28 +04:00
parent 05af039d1e
commit 71714178fa
2 changed files with 13 additions and 15 deletions

View file

@ -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;
}

View file

@ -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