private void createMasterClient(ConsulTestNode node) { AtomicReference<ConsulTestNode> usedNode = new AtomicReference<>(node); masterClient = ConsulClient.create(vertx, new ConsulClientOptions().setAclToken(MASTER_TOKEN).setDc(TEST_DC).setHost(LOCALHOST).setPort(usedNode.get().httpPort()).setSsl(false)); vertx.setPeriodic(5000, l -> { if ((usedNode.get() == null || !usedNode.get().isRunning()) && masterClient != null) { masterClient.close(); masterClient = null; } }); } }
/** * Copy constructor * * @param options the one to copy */ public ConsulClientOptions(ConsulClientOptions options) { super(options); setHost(options.getHost()); setPort(options.getPort()); setAclToken(options.getAclToken()); setDc(options.getDc()); setTimeout(options.getTimeout()); }
public static void toJson(ConsulClientOptions obj, java.util.Map<String, Object> json) { if (obj.getAclToken() != null) { json.put("aclToken", obj.getAclToken()); } if (obj.getDc() != null) { json.put("dc", obj.getDc()); } json.put("timeout", obj.getTimeout()); } }
/** * Constructor from {@link URI}. * The datacenter and the acl token can be defined in the query; the scheme will be ignored. * * For example: * <p><code> * consul://consul.example.com/?dc=dc1&acl=00000000-0000-0000-0000-000000000000 * </code></p> * @param uri the URI */ public ConsulClientOptions(URI uri) { setHost(uri.getHost()); setPort(uri.getPort() < 0 ? CONSUL_DEFAULT_PORT : uri.getPort()); Map<String, List<String>> params = params(uri); setDc(getParam(params, "dc")); setAclToken(getParam(params, "acl", "aclToken")); }
@Test public void copy() { ConsulClientOptions options = new ConsulClientOptions() .setHost("host") .setPort(42) .setTimeout(33) .setUserAgent("ag") .setAclToken("tok") .setDc("d"); ConsulClientOptions copy = new ConsulClientOptions(options); assertEquals(options.getHost(), copy.getHost()); assertEquals(options.getPort(), copy.getPort()); assertEquals(options.getTimeout(), copy.getTimeout()); assertEquals(options.getUserAgent(), copy.getUserAgent()); assertEquals(options.getAclToken(), copy.getAclToken()); assertEquals(options.getDc(), copy.getDc()); }
/** * Creates {@code Watch} to monitoring the list of available nodes. * The underlying Consul client will be created with default options. * This maps to the <a href="https://www.consul.io/api/catalog.html#list-nodes">/v1/catalog/nodes</a> API internally. * * @param vertx the {@code Vertx} instance * @return the {@code Watch} instance */ static Watch<NodeList> nodes(Vertx vertx) { return new WatchImpl.Nodes(vertx, new ConsulClientOptions()); }
@Test public void toJson() { ConsulClientOptions options = new ConsulClientOptions() .setHost("host") .setPort(42) .setTimeout(33) .setUserAgent("ag") .setAclToken("tok") .setDc("d"); JsonObject json = options.toJson(); checkJson(options, json); }
@Test public void unknownPort(TestContext tc) { ConsulClient unknownPort = ctx.createClient(new ConsulClientOptions().setPort(Utils.getFreePort())); tryClient(tc, unknownPort, "Connection refused"); }
private void checkURI(URI uri, String host, int port, String dc, String acl) { ConsulClientOptions options = new ConsulClientOptions(uri); assertEquals(options.getHost(), host); assertEquals(options.getPort(), port); assertEquals(options.getDc(), dc); assertEquals(options.getAclToken(), acl); }
@Test public void timeout(TestContext tc) { SlowHttpServer slowConsul = new SlowHttpServer(vertx, 10000); ConsulClient client = ctx.createClient(new ConsulClientOptions().setPort(slowConsul.port()).setTimeout(1000)); client.agentInfo(tc.asyncAssertFailure(t -> { ctx.closeClient(client); slowConsul.close(); tc.assertTrue(t.getMessage().contains("The timeout period of 1000ms")); })); }
@Test public void fromEmptyJson() { ConsulClientOptions options = new ConsulClientOptions(new JsonObject()); assertEquals(options.getHost(), "localhost"); assertEquals(options.getPort(), 8500); }
@Test public void unknownHost(TestContext tc) { ConsulClient unknownHost = ctx.createClient(new ConsulClientOptions().setHost("unknownConsulHost")); tryClient(tc, unknownHost, "unknownConsulHost"); }
private void checkJson(ConsulClientOptions options, JsonObject json) { assertEquals(options.getHost(), json.getString("host")); assertEquals(options.getPort(), (int) json.getInteger("port")); assertEquals(options.getTimeout(), (long) json.getLong("timeout")); assertEquals(options.getUserAgent(), json.getString("userAgent")); assertEquals(options.getAclToken(), json.getString("aclToken")); assertEquals(options.getDc(), json.getString("dc")); }
public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, ConsulClientOptions obj) { for (java.util.Map.Entry<String, Object> member : json) { switch (member.getKey()) { case "aclToken": if (member.getValue() instanceof String) { obj.setAclToken((String)member.getValue()); } break; case "dc": if (member.getValue() instanceof String) { obj.setDc((String)member.getValue()); } break; case "timeout": if (member.getValue() instanceof Number) { obj.setTimeout(((Number)member.getValue()).longValue()); } break; } } }
/** * Constructor from JSON * * @param json the JSON */ public ConsulClientOptions(JsonObject json) { super(json); ConsulClientOptionsConverter.fromJson(json, this); if (json.getValue("host") instanceof String) { setHost((String)json.getValue("host")); } else { setHost(CONSUL_DEFAULT_HOST); } if (json.getValue("port") instanceof Number) { setPort(((Number)json.getValue("port")).intValue()); } else { setPort(CONSUL_DEFAULT_PORT); } }
/** * Create a Consul client with default options. * * @param vertx the Vert.x instance * @return the client */ static ConsulClient create(Vertx vertx) { return new ConsulClientImpl(vertx, new ConsulClientOptions()); }
@Before public void setUp(TestContext tc) throws Exception { vertx = Vertx.vertx(); vertx.exceptionHandler(tc.exceptionHandler()); client = ConsulClient.create(vertx, new ConsulClientOptions().setPort(consulProcess.getHttpPort())); }
@Test public void defaults() { ConsulClientOptions options = new ConsulClientOptions(); assertEquals(options.getHost(), "localhost"); assertEquals(options.getPort(), 8500); assertEquals(options.getTimeout(), 0); assertEquals(options.getAclToken(), null); assertEquals(options.getDc(), null); }
public ConsulClientImpl(Vertx vertx, ConsulClientOptions options) { Objects.requireNonNull(vertx); Objects.requireNonNull(options); webClient = WebClient.create(vertx, options); ctx = vertx.getOrCreateContext(); aclToken = options.getAclToken(); dc = options.getDc(); timeoutMs = options.getTimeout(); }
@Override public Future<ConsulClientOptions> clientOptionsForNode(ConsulTestNode node, String rules) { Future<ConsulTestNode> usedNode = Future.future(); if (node == null || !node.isRunning()) { getServerNode().setHandler(usedNode); } else { usedNode.complete(node); } return usedNode.compose(n -> createToken(n, rules)).compose(token -> Future.succeededFuture(new ConsulClientOptions() .setAclToken(token) .setDc(TEST_DC) .setHost(LOCALHOST) .setPort(usedNode.result().httpPort()) .setSsl(false)) ); }