use of io.vertx.core.dns.AddressResolverOptions in project vert.x by eclipse.
the class HostnameResolutionTest method testSearchDomainWithNdots2.
@Test
public void testSearchDomainWithNdots2() throws Exception {
Map<String, String> records = new HashMap<>();
records.put("host1.sub.foo.com", "127.0.0.1");
records.put("host2.sub.foo.com", "127.0.0.2");
records.put("host2.sub", "127.0.0.3");
dnsServer.stop();
dnsServer = FakeDNSServer.testResolveA(records);
dnsServer.start();
VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort()).setOptResourceEnabled(false).addSearchDomain("foo.com").setNdots(2)));
CountDownLatch latch1 = new CountDownLatch(1);
vertx.resolveAddress("host1.sub", onSuccess(resolved -> {
assertEquals("127.0.0.1", resolved.getHostAddress());
latch1.countDown();
}));
awaitLatch(latch1);
// "host2.sub" is resolved with the foo.com search domain as ndots = 2
CountDownLatch latch2 = new CountDownLatch(1);
vertx.resolveAddress("host2.sub", onSuccess(resolved -> {
assertEquals("127.0.0.2", resolved.getHostAddress());
latch2.countDown();
}));
awaitLatch(latch2);
}
use of io.vertx.core.dns.AddressResolverOptions in project vert.x by eclipse.
the class HostnameResolutionTest method testServerSelection.
private void testServerSelection(boolean rotateServers) throws Exception {
int num = VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE + 4;
List<FakeDNSServer> dnsServers = new ArrayList<>();
try {
for (int index = 1; index <= num; index++) {
FakeDNSServer server = new FakeDNSServer(FakeDNSServer.A_store(Collections.singletonMap("vertx.io", "127.0.0." + index)));
server.port(FakeDNSServer.PORT + index);
server.start();
dnsServers.add(server);
}
AddressResolverOptions options = new AddressResolverOptions();
options.setRotateServers(rotateServers);
options.setOptResourceEnabled(false);
for (int i = 0; i < num; i++) {
InetSocketAddress dnsServerAddress = dnsServers.get(i).localAddress();
options.addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort());
}
AddressResolver resolver = new AddressResolver((VertxImpl) vertx, options);
for (int i = 0; i < num; i++) {
CompletableFuture<InetAddress> result = new CompletableFuture<>();
resolver.resolveHostname("vertx.io", ar -> {
if (ar.succeeded()) {
result.complete(ar.result());
} else {
result.completeExceptionally(ar.cause());
}
});
String resolved = result.get(10, TimeUnit.SECONDS).getHostAddress();
int expected;
if (rotateServers) {
// Expect from [1,...,DEFAULT_EVENT_LOOP_POOL_SIZE[ as we round robin but then we cache the result
// so it checks that round robin cross event loops
expected = 1 + i % VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE;
} else {
expected = 1;
}
assertEquals("127.0.0." + expected, resolved);
}
} finally {
dnsServers.forEach(FakeDNSServer::stop);
}
}
use of io.vertx.core.dns.AddressResolverOptions in project vert.x by eclipse.
the class HostnameResolutionTest method testNetSearchDomain.
@Test
public void testNetSearchDomain() throws Exception {
Map<String, String> records = new HashMap<>();
records.put("host1.foo.com", "127.0.0.1");
dnsServer.stop();
dnsServer = FakeDNSServer.testResolveA(records);
dnsServer.start();
vertx.close();
vertx = vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort()).setOptResourceEnabled(false).addSearchDomain("foo.com")));
testNet("host1");
}
use of io.vertx.core.dns.AddressResolverOptions in project vert.x by eclipse.
the class HostnameResolutionTest method testServerFailover.
@Test
public void testServerFailover() throws Exception {
FakeDNSServer server = new FakeDNSServer(FakeDNSServer.A_store(Collections.singletonMap("vertx.io", "127.0.0.1"))).port(FakeDNSServer.PORT + 2);
try {
AddressResolverOptions options = new AddressResolverOptions();
options.setOptResourceEnabled(false);
// 2 + 2
options.setMaxQueries(4);
server.start();
InetSocketAddress dnsServerAddress = server.localAddress();
// First server is unreachable
options.addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + (FakeDNSServer.PORT + 1));
// Second server is the failed over server
options.addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort());
AddressResolver resolver = new AddressResolver((VertxImpl) vertx, options);
CompletableFuture<InetAddress> result = new CompletableFuture<>();
resolver.resolveHostname("vertx.io", ar -> {
if (ar.succeeded()) {
result.complete(ar.result());
} else {
result.completeExceptionally(ar.cause());
}
});
String resolved = result.get(10, TimeUnit.SECONDS).getHostAddress();
assertEquals("127.0.0.1", resolved);
} finally {
server.stop();
}
}
use of io.vertx.core.dns.AddressResolverOptions in project vert.x by eclipse.
the class HostnameResolutionTest method testResolveLocalhost.
@Test
public void testResolveLocalhost() {
AddressResolver resolver = new AddressResolver((VertxImpl) vertx, new AddressResolverOptions());
resolver.resolveHostname("LOCALHOST", res -> {
if (res.succeeded()) {
assertEquals("localhost", res.result().getHostName().toLowerCase(Locale.ENGLISH));
resolver.resolveHostname("LocalHost", res2 -> {
if (res2.succeeded()) {
assertEquals("localhost", res2.result().getHostName().toLowerCase(Locale.ENGLISH));
resolver.resolveHostname("localhost", res3 -> {
if (res3.succeeded()) {
assertEquals("localhost", res3.result().getHostName().toLowerCase(Locale.ENGLISH));
testComplete();
} else {
fail(res3.cause());
}
});
} else {
fail(res2.cause());
}
});
} else {
fail(res.cause());
}
});
await();
}
Aggregations