diff --git a/pkg/dns/dns.go b/pkg/dns/dns.go index 4c888a3f..46408049 100644 --- a/pkg/dns/dns.go +++ b/pkg/dns/dns.go @@ -7,11 +7,16 @@ import ( // EnsureIPv4 ensures that an ipv4 address is set for a domain name func EnsureIPv4(domainName string) (string, error) { - ipv4, err := net.ResolveIPAddr("ip", domainName) + ipv4, err := net.ResolveIPAddr("ip4", domainName) if err != nil { return "", err } + // NOTE(d1): e.g. when there is only an ipv6 record available + if ipv4 == nil { + return "", fmt.Errorf("unable to resolve ipv4 address for %s", domainName) + } + return ipv4.String(), nil } diff --git a/pkg/dns/dns_test.go b/pkg/dns/dns_test.go index 49b414fd..ab06c63b 100644 --- a/pkg/dns/dns_test.go +++ b/pkg/dns/dns_test.go @@ -3,6 +3,8 @@ package dns import ( "fmt" "testing" + + "gotest.tools/v3/assert" ) func TestEnsureDomainsResolveSameIPv4(t *testing.T) { @@ -36,3 +38,22 @@ func TestEnsureDomainsResolveSameIPv4(t *testing.T) { } } } + +func TestEnsureIpv4(t *testing.T) { + domainName := "collabora.ostrom.collective.tools" + serverName := "ostrom.collective.tools" + + for i := 0; i < 15; i++ { + domainIpv4, err := EnsureIPv4(domainName) + if err != nil { + t.Fatal(err) + } + + serverIpv4, err := EnsureIPv4(serverName) + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, domainIpv4, serverIpv4) + } +}