From 50e0e8c5ca8466da9057efc5a1e65c20de2714dc Mon Sep 17 00:00:00 2001 From: Violeta Georgieva Date: Mon, 14 Jun 2021 10:05:44 +0300 Subject: [PATCH] Skip the windows tests when there is an entry for localhost in the hosts file (#11385) Motivation: The tests must be executed only when there is no hosts file or there is no entry for localhost in the hosts file. The tested functionality is relevant only in these use cases. Modifications: Skip the windows tests when there is an entry for localhost in the hosts file. Result: Fix failing tests on Windows CI when using GitHub Actions Related to #11384 --- .../resolver/dns/DnsNameResolverTest.java | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java b/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java index b211308016..f147a92095 100644 --- a/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java +++ b/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java @@ -39,6 +39,7 @@ import io.netty.handler.codec.dns.DnsRecordType; import io.netty.handler.codec.dns.DnsResponse; import io.netty.handler.codec.dns.DnsResponseCode; import io.netty.handler.codec.dns.DnsSection; +import io.netty.resolver.HostsFileEntriesProvider; import io.netty.resolver.HostsFileEntriesResolver; import io.netty.resolver.ResolvedAddressTypes; import io.netty.util.CharsetUtil; @@ -79,6 +80,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; +import java.nio.charset.Charset; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -331,16 +333,40 @@ public class DnsNameResolverTest { StringUtil.EMPTY_STRING); } - private static final String HOST_NAME; + private static final String WINDOWS_HOST_NAME; + private static final boolean WINDOWS_HOSTS_FILE_LOCALHOST_ENTRY_EXISTS; + private static final boolean WINDOWS_HOSTS_FILE_HOST_NAME_ENTRY_EXISTS; static { - String hostName; + String windowsHostName; + boolean windowsHostsFileLocalhostEntryExists; + boolean windowsHostsFileHostNameEntryExists; try { - hostName = PlatformDependent.isWindows() ? InetAddress.getLocalHost().getHostName() : null; + if (PlatformDependent.isWindows()) { + windowsHostName = InetAddress.getLocalHost().getHostName(); + + HostsFileEntriesProvider provider = + HostsFileEntriesProvider.parser() + .parseSilently(Charset.defaultCharset(), CharsetUtil.UTF_16, CharsetUtil.UTF_8); + windowsHostsFileLocalhostEntryExists = + provider.ipv4Entries().get("localhost") != null || + provider.ipv6Entries().get("localhost") != null; + windowsHostsFileHostNameEntryExists = + provider.ipv4Entries().get(windowsHostName) != null || + provider.ipv6Entries().get(windowsHostName) != null; + } else { + windowsHostName = null; + windowsHostsFileLocalhostEntryExists = false; + windowsHostsFileHostNameEntryExists = false; + } } catch (Exception ignore) { - hostName = null; + windowsHostName = null; + windowsHostsFileLocalhostEntryExists = false; + windowsHostsFileHostNameEntryExists = false; } - HOST_NAME = hostName; + WINDOWS_HOST_NAME = windowsHostName; + WINDOWS_HOSTS_FILE_LOCALHOST_ENTRY_EXISTS = windowsHostsFileLocalhostEntryExists; + WINDOWS_HOSTS_FILE_HOST_NAME_ENTRY_EXISTS = windowsHostsFileHostNameEntryExists; } private static final TestDnsServer dnsServer = new TestDnsServer(DOMAINS_ALL); @@ -768,6 +794,7 @@ public class DnsNameResolverTest { @Test public void testResolveLocalhostIpv4() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_LOCALHOST_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isNotEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); testResolve0(ResolvedAddressTypes.IPV4_ONLY, NetUtil.LOCALHOST4, "localhost"); } @@ -775,6 +802,7 @@ public class DnsNameResolverTest { @Test public void testResolveLocalhostIpv6() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_LOCALHOST_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); testResolve0(ResolvedAddressTypes.IPV6_ONLY, NetUtil.LOCALHOST6, "localhost"); } @@ -782,15 +810,17 @@ public class DnsNameResolverTest { @Test public void testResolveHostNameIpv4() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_HOST_NAME_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isNotEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); - testResolve0(ResolvedAddressTypes.IPV4_ONLY, NetUtil.LOCALHOST4, HOST_NAME); + testResolve0(ResolvedAddressTypes.IPV4_ONLY, NetUtil.LOCALHOST4, WINDOWS_HOST_NAME); } @Test public void testResolveHostNameIpv6() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_HOST_NAME_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); - testResolve0(ResolvedAddressTypes.IPV6_ONLY, NetUtil.LOCALHOST6, HOST_NAME); + testResolve0(ResolvedAddressTypes.IPV6_ONLY, NetUtil.LOCALHOST6, WINDOWS_HOST_NAME); } @Test @@ -829,6 +859,7 @@ public class DnsNameResolverTest { @Test public void testResolveAllLocalhostIpv4() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_LOCALHOST_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isNotEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); testResolveAll0(ResolvedAddressTypes.IPV4_ONLY, NetUtil.LOCALHOST4, "localhost"); } @@ -836,6 +867,7 @@ public class DnsNameResolverTest { @Test public void testResolveAllLocalhostIpv6() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_LOCALHOST_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); testResolveAll0(ResolvedAddressTypes.IPV6_ONLY, NetUtil.LOCALHOST6, "localhost"); } @@ -843,15 +875,17 @@ public class DnsNameResolverTest { @Test public void testResolveAllHostNameIpv4() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_HOST_NAME_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isNotEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); - testResolveAll0(ResolvedAddressTypes.IPV4_ONLY, NetUtil.LOCALHOST4, HOST_NAME); + testResolveAll0(ResolvedAddressTypes.IPV4_ONLY, NetUtil.LOCALHOST4, WINDOWS_HOST_NAME); } @Test public void testResolveAllHostNameIpv6() { assumeThat(PlatformDependent.isWindows()).isTrue(); + assumeThat(WINDOWS_HOSTS_FILE_HOST_NAME_ENTRY_EXISTS).isFalse(); assumeThat(DEFAULT_RESOLVE_ADDRESS_TYPES).isEqualTo(ResolvedAddressTypes.IPV6_PREFERRED); - testResolveAll0(ResolvedAddressTypes.IPV6_ONLY, NetUtil.LOCALHOST6, HOST_NAME); + testResolveAll0(ResolvedAddressTypes.IPV6_ONLY, NetUtil.LOCALHOST6, WINDOWS_HOST_NAME); } @Test