Skip to content

Commit

Permalink
Resolve from hosts config using lower case
Browse files Browse the repository at this point in the history
  • Loading branch information
vietj committed Jun 22, 2016
1 parent 8068b2d commit 4d16b22
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 14 deletions.
10 changes: 9 additions & 1 deletion src/main/java/io/vertx/core/impl/AddressResolver.java
Expand Up @@ -20,6 +20,7 @@
import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.resolver.AddressResolverGroup; import io.netty.resolver.AddressResolverGroup;
import io.netty.resolver.DefaultAddressResolverGroup; import io.netty.resolver.DefaultAddressResolverGroup;
import io.netty.resolver.HostsFileEntriesResolver;
import io.netty.resolver.HostsFileParser; import io.netty.resolver.HostsFileParser;
import io.netty.resolver.InetSocketAddressResolver; import io.netty.resolver.InetSocketAddressResolver;
import io.netty.resolver.dns.DnsServerAddresses; import io.netty.resolver.dns.DnsServerAddresses;
Expand All @@ -42,6 +43,7 @@
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;


/** /**
Expand Down Expand Up @@ -114,7 +116,13 @@ public AddressResolver(VertxImpl vertx, AddressResolverOptions options) {
} }
} catch (UnknownHostException ignore) { } catch (UnknownHostException ignore) {
} }
builder.hostsFileEntriesResolver(entries::get); builder.hostsFileEntriesResolver(inetHost -> {
InetAddress addr = entries.get(inetHost);
if (addr == null) {
addr = entries.get(inetHost.toLowerCase(Locale.ENGLISH));
}
return addr;
});


builder.optResourceEnabled(options.isOptResourceEnabled()); builder.optResourceEnabled(options.isOptResourceEnabled());
builder.ttl(options.getCacheMinTimeToLive(), options.getCacheMaxTimeToLive()); builder.ttl(options.getCacheMinTimeToLive(), options.getCacheMaxTimeToLive());
Expand Down
52 changes: 39 additions & 13 deletions src/test/java/io/vertx/test/core/HostnameResolutionTest.java
Expand Up @@ -379,6 +379,17 @@ public void testResolveFromBuffer() {
await(); await();
} }


@Test
public void testCaseInsensitiveResolveFromHosts() {
VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().setHostsPath("hosts_config.txt")));
vertx.resolveAddress("SERVER.NET", onSuccess(addr -> {
assertEquals("192.168.0.15", addr.getHostAddress());
assertEquals("server.net", addr.getHostName());
testComplete();
}));
await();
}

@Test @Test
public void testResolveMissingLocalhost() throws Exception { public void testResolveMissingLocalhost() throws Exception {


Expand All @@ -397,46 +408,61 @@ public void testResolveMissingLocalhost() throws Exception {
addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort()). addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort()).
setOptResourceEnabled(false) setOptResourceEnabled(false)
)); ));
CompletableFuture<Void> test = new CompletableFuture<>(); CompletableFuture<Void> test1 = new CompletableFuture<>();
vertx.resolveAddress("localhost", ar -> { vertx.resolveAddress("localhost", ar -> {
if (ar.succeeded()) { if (ar.succeeded()) {
InetAddress resolved = ar.result(); InetAddress resolved = ar.result();
if (resolved.equals(localhost)) { if (resolved.equals(localhost)) {
test.complete(null); test1.complete(null);
} else { } else {
test.completeExceptionally(new AssertionError("Unexpected localhost value " + resolved)); test1.completeExceptionally(new AssertionError("Unexpected localhost value " + resolved));
} }
} else { } else {
test.completeExceptionally(ar.cause()); test1.completeExceptionally(ar.cause());
} }
}); });
test.get(10, TimeUnit.SECONDS); test1.get(10, TimeUnit.SECONDS);


// Test using bootstrap
CompletableFuture<Void> test2 = new CompletableFuture<>(); CompletableFuture<Void> test2 = new CompletableFuture<>();
vertx.resolveAddress("LOCALHOST", ar -> {
if (ar.succeeded()) {
InetAddress resolved = ar.result();
if (resolved.equals(localhost)) {
test2.complete(null);
} else {
test2.completeExceptionally(new AssertionError("Unexpected localhost value " + resolved));
}
} else {
test2.completeExceptionally(ar.cause());
}
});
test2.get(10, TimeUnit.SECONDS);

// Test using bootstrap
CompletableFuture<Void> test3 = new CompletableFuture<>();
NetServer server = vertx.createNetServer(new NetServerOptions().setPort(1234).setHost(localhost.getHostAddress())); NetServer server = vertx.createNetServer(new NetServerOptions().setPort(1234).setHost(localhost.getHostAddress()));
server.connectHandler(so -> { server.connectHandler(so -> {
so.write("hello").end(); so.write("hello").end();
}); });
server.listen(ar -> { server.listen(ar -> {
if (ar.succeeded()) { if (ar.succeeded()) {
test2.complete(null); test3.complete(null);
} else { } else {
test2.completeExceptionally(ar.cause()); test3.completeExceptionally(ar.cause());
} }
}); });
test2.get(10, TimeUnit.SECONDS); test3.get(10, TimeUnit.SECONDS);


CompletableFuture<Void> test3 = new CompletableFuture<>(); CompletableFuture<Void> test4 = new CompletableFuture<>();
NetClient client = vertx.createNetClient(); NetClient client = vertx.createNetClient();
client.connect(1234, "localhost", ar -> { client.connect(1234, "localhost", ar -> {
if (ar.succeeded()) { if (ar.succeeded()) {
test3.complete(null); test4.complete(null);
} else { } else {
test3.completeExceptionally(ar.cause()); test4.completeExceptionally(ar.cause());
} }
}); });
test3.get(10, TimeUnit.SECONDS); test4.get(10, TimeUnit.SECONDS);
} }


@Test @Test
Expand Down

0 comments on commit 4d16b22

Please sign in to comment.