@Test public void testDefaultJsonOptions() { AddressResolverOptions options = new AddressResolverOptions(new JsonObject()); assertEquals(AddressResolverOptions.DEFAULT_OPT_RESOURCE_ENABLED, options.isOptResourceEnabled()); assertEquals(AddressResolverOptions.DEFAULT_SERVERS, options.getServers()); assertEquals(AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE, options.getCacheMinTimeToLive()); assertEquals(AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE, options.getCacheMaxTimeToLive()); assertEquals(AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE, options.getCacheNegativeTimeToLive()); assertEquals(AddressResolverOptions.DEFAULT_QUERY_TIMEOUT, options.getQueryTimeout()); assertEquals(AddressResolverOptions.DEFAULT_MAX_QUERIES, options.getMaxQueries()); assertEquals(AddressResolverOptions.DEFAULT_RD_FLAG, options.getRdFlag()); assertEquals(AddressResolverOptions.DEFAULT_SEACH_DOMAINS, options.getSearchDomains()); assertEquals(AddressResolverOptions.DEFAULT_NDOTS, options.getNdots()); }
@Test public void testResolveFromFile() { File f = new File(new File(new File(new File("src"), "test"), "resources"), "hosts_config.txt"); VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().setHostsPath(f.getAbsolutePath()))); vertx.resolveAddress("server.net", onSuccess(addr -> { assertEquals("192.168.0.15", addr.getHostAddress()); assertEquals("server.net", addr.getHostName()); testComplete(); })); await(); }
@Test public void testParseResolvConf() { assertEquals(-1, AddressResolver.parseNdotsOptionFromResolvConf("options")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("\noptions ndots: 4")); assertEquals(-1, AddressResolver.parseNdotsOptionFromResolvConf("boptions ndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf(" options ndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("\toptions ndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("\foptions ndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("\n options ndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options\tndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options\fndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots: 4")); assertEquals(-1, AddressResolver.parseNdotsOptionFromResolvConf("options\nndots: 4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:\t4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots: 4")); assertEquals(-1, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:\n4")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4 ")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4\t")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4\f")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4\n")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4\r")); assertEquals(-1, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4_")); assertEquals(2, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4\noptions ndots:2")); assertEquals(4, AddressResolver.parseNdotsOptionFromResolvConf("options ndots:4 debug"));
@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(); }
@Test public void testResolveFromBuffer() { VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().setHostsValue(Buffer.buffer("192.168.0.15 server.net")))); vertx.resolveAddress("server.net", onSuccess(addr -> { assertEquals("192.168.0.15", addr.getHostAddress()); assertEquals("server.net", addr.getHostName()); testComplete(); })); 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 public void testAsyncResolve() throws Exception { ((VertxImpl) vertx).resolveAddress("vertx.io", onSuccess(resolved -> { assertEquals("127.0.0.1", resolved.getHostAddress()); testComplete(); })); await(); }
@Test public void testResolveFromClasspath() { 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 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.testResolveA(records); 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); }
@Test public void testSearchDomainWithNdots0() throws Exception { Map<String, String> records = new HashMap<>(); records.put("host1", "127.0.0.2"); records.put("host1.foo.com", "127.0.0.3"); dnsServer.testResolveA(records); VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setAddressResolverOptions( new AddressResolverOptions(). addServer(dnsServerAddress.getAddress().getHostAddress() + ":" + dnsServerAddress.getPort()). setOptResourceEnabled(false). addSearchDomain("foo.com"). setNdots(0) )); // "host1" resolves directly as ndots = 0 CountDownLatch latch1 = new CountDownLatch(1); vertx.resolveAddress("host1", onSuccess(resolved -> { assertEquals("127.0.0.2", resolved.getHostAddress()); latch1.countDown(); })); awaitLatch(latch1); // "host1.foo.com" resolves to host1.foo.com CountDownLatch latch2 = new CountDownLatch(1); vertx.resolveAddress("host1.foo.com", onSuccess(resolved -> { assertEquals("127.0.0.3", resolved.getHostAddress()); latch2.countDown(); })); awaitLatch(latch2); }
@Test public void testServerFailover() throws Exception { FakeDNSServer server = new FakeDNSServer().store(FakeDNSServer.A_store(Collections.singletonMap("vertx.io", "127.0.0.1"))).port(FakeDNSServer.PORT + 2); try { AddressResolverOptions options = new AddressResolverOptions(); options.setOptResourceEnabled(false); options.setMaxQueries(4); // 2 + 2 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(); } } }
expected = 1; assertEquals("127.0.0." + expected, resolved);
@Test public void testHttp() throws Exception { HttpClient client = vertx.createHttpClient(); HttpServer server = vertx.createHttpServer().requestHandler(req -> { req.response().end("foo"); }); try { CountDownLatch listenLatch = new CountDownLatch(1); server.listen(8080, "vertx.io", onSuccess(s -> { listenLatch.countDown(); })); awaitLatch(listenLatch); client.getNow(8080, "vertx.io", "/somepath", onSuccess(resp -> { Buffer buffer = Buffer.buffer(); resp.handler(buffer::appendBuffer); resp.endHandler(v -> { assertEquals(Buffer.buffer("foo"), buffer); testComplete(); }); })); await(); } finally { client.close(); server.close(); } }
assertEquals(addr_host1_foo_com, resolved.getHostAddress()); latch1.countDown(); })); assertEquals(addr_host1, resolved.getHostAddress()); latch2.countDown(); })); assertEquals(addr_host3, cause.getHostAddress()); latch4.countDown(); })); assertEquals(addr_host3, resolved.getHostAddress()); latch5.countDown(); })); assertEquals(addr_host4_sub_foo_com, resolved.getHostAddress()); latch6.countDown(); })); assertEquals(addr_host5_sub_foo_com, resolved.getHostAddress()); latch7.countDown(); })); assertEquals(addr_host6_sub_sub_foo_com, resolved.getHostAddress()); latch8.countDown(); })); assertEquals(addr_host7_sub_sub, resolved.getHostAddress());
channelFut.addListener(v -> { assertTrue(v.isSuccess()); assertEquals(channelThread.get(), Thread.currentThread()); testComplete(); });
assertEquals("127.0.0.1", resolved.getHostAddress()); latch1.countDown(); })); assertEquals("127.0.0.2", resolved.getHostAddress()); latch2.countDown(); })); assertEquals("127.0.0.4", resolved.getHostAddress()); latch3.countDown(); }));
@Test public void testOptions() { AddressResolverOptions options = new AddressResolverOptions(); assertEquals(AddressResolverOptions.DEFAULT_OPT_RESOURCE_ENABLED, options.isOptResourceEnabled()); assertEquals(AddressResolverOptions.DEFAULT_SERVERS, options.getServers()); assertEquals(AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE, options.getCacheMinTimeToLive()); assertEquals(AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE, options.getCacheMaxTimeToLive()); assertEquals(AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE, options.getCacheNegativeTimeToLive()); assertEquals(AddressResolverOptions.DEFAULT_QUERY_TIMEOUT, options.getQueryTimeout()); assertEquals(AddressResolverOptions.DEFAULT_MAX_QUERIES, options.getMaxQueries()); assertEquals(AddressResolverOptions.DEFAULT_RD_FLAG, options.getRdFlag()); assertEquals(AddressResolverOptions.DEFAULT_NDOTS, options.getNdots()); assertEquals(AddressResolverOptions.DEFAULT_SEACH_DOMAINS, options.getSearchDomains()); assertEquals(optResourceEnabled, options.isOptResourceEnabled()); assertEquals(servers, options.getServers()); assertEquals(minTTL, options.getCacheMinTimeToLive()); assertEquals(maxTTL, options.getCacheMaxTimeToLive()); assertEquals(negativeTTL, options.getCacheNegativeTimeToLive()); assertEquals(queryTimeout, options.getQueryTimeout()); assertEquals(maxQueries, options.getMaxQueries()); assertEquals(rdFlag, options.getRdFlag()); assertEquals(ndots, options.getNdots()); assertEquals(searchDomains, options.getSearchDomains()); assertEquals(optResourceEnabled, copy.isOptResourceEnabled()); assertEquals(servers, copy.getServers()); assertEquals(minTTL, copy.getCacheMinTimeToLive()); assertEquals(maxTTL, copy.getCacheMaxTimeToLive()); assertEquals(negativeTTL, copy.getCacheNegativeTimeToLive());
private void testNet(String hostname) throws Exception { NetClient client = vertx.createNetClient(); NetServer server = vertx.createNetServer().connectHandler(so -> { so.handler(buff -> { so.write(buff); so.close(); }); }); try { CountDownLatch listenLatch = new CountDownLatch(1); server.listen(1234, hostname, onSuccess(s -> { listenLatch.countDown(); })); awaitLatch(listenLatch); client.connect(1234, hostname, onSuccess(so -> { Buffer buffer = Buffer.buffer(); so.handler(buffer::appendBuffer); so.closeHandler(v -> { assertEquals(Buffer.buffer("foo"), buffer); testComplete(); }); so.write(Buffer.buffer("foo")); })); await(); } finally { client.close(); server.close(); } }
@Test public void testResolveFromBuffer() { VertxInternal vertx = (VertxInternal) vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().setHostsValue(Buffer.buffer("192.168.0.15 server.net")))); vertx.resolveAddress("server.net", onSuccess(addr -> { assertEquals("192.168.0.15", addr.getHostAddress()); assertEquals("server.net", addr.getHostName()); testComplete(); })); await(); }
@Test public void testResolveFromClasspath() { 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(); }