public static void toJson(Check obj, java.util.Map<String, Object> json) { if (obj.getId() != null) { json.put("id", obj.getId()); } if (obj.getName() != null) { json.put("name", obj.getName()); } if (obj.getNodeName() != null) { json.put("nodeName", obj.getNodeName()); } if (obj.getNotes() != null) { json.put("notes", obj.getNotes()); } if (obj.getOutput() != null) { json.put("output", obj.getOutput()); } if (obj.getServiceId() != null) { json.put("serviceId", obj.getServiceId()); } if (obj.getServiceName() != null) { json.put("serviceName", obj.getServiceName()); } if (obj.getStatus() != null) { json.put("status", obj.getStatus().name()); } } }
static Check parse(JsonObject check) { return new Check() .setId(check.getString(ID_KEY)) .setName(check.getString(NAME_KEY)) .setNodeName(check.getString(NODE_KEY)) .setStatus(CheckStatus.of(check.getString(STATUS_KEY))) .setNotes(check.getString(NOTES_KEY)) .setOutput(check.getString(OUTPUT_KEY)) .setServiceId(check.getString(SERVICE_ID_KEY)) .setServiceName(check.getString(SERVICE_NAME_KEY)); } }
@Test public void bindCheckToService() { String serviceName = "serviceName"; ServiceOptions service = new ServiceOptions() .setName(serviceName) .setAddress("10.0.0.1") .setPort(8080); runAsync(h -> ctx.writeClient().registerService(service, h)); List<Service> services = getAsync(h -> ctx.writeClient().localServices(h)); Service s = services.stream().filter(i -> "serviceName".equals(i.getName())).findFirst().get(); String serviceId = s.getId(); assertEquals(s.getAddress(), "10.0.0.1"); assertEquals(s.getPort(), 8080); CheckOptions check = new CheckOptions() .setId("checkId") .setName("checkName") .setNotes("checkNotes") .setServiceId(serviceId) .setStatus(CheckStatus.PASSING) .setTtl("10s"); runAsync(h -> ctx.writeClient().registerCheck(check, h)); List<Check> checks = getAsync(h -> ctx.writeClient().localChecks(h)); Check c = checks.stream().filter(i -> "checkId".equals(i.getId())).findFirst().get(); assertEquals(c.getServiceId(), serviceId); assertEquals(c.getStatus(), CheckStatus.PASSING); assertEquals(c.getNotes(), "checkNotes"); runAsync(h -> ctx.writeClient().deregisterService(serviceId, h)); }
List<ServiceEntry> serviceEntries = list.stream() .filter(serviceEntry -> serviceEntry.getChecks().stream().allMatch(check -> isCheckOK(check.getStatus()))
ctx.writeClient().localChecks(tc.asyncAssertSuccess(checks -> { Check c = checks.stream() .filter(i -> serviceName.equals(i.getServiceName())) .findFirst() .orElseThrow(NoSuchElementException::new); tc.assertEquals(c.getId(), "service:" + serviceName); tc.assertEquals(c.getNotes(), opts.getCheckOptions().getNotes()); ctx.writeClient().catalogNodeServices(ctx.nodeName(), tc.asyncAssertSuccess(nodeServices -> { tc.assertEquals(2, nodeServices.getList().size());
@Test(timeout = 3 * 60 * 1000) public void deregisterAfter(TestContext tc) { if (System.getProperty("skipDeregisterAfter") != null) { System.out.println("skip"); return; } CheckOptions opts = new CheckOptions() .setDeregisterAfter("1m") .setStatus(CheckStatus.PASSING) .setTtl("10s") .setName("checkName"); Async async = tc.async(); createCheck(tc, opts, checkId -> { getCheckInfo(tc, checkId, passing -> { tc.assertEquals(CheckStatus.PASSING, passing.getStatus()); vertx.setTimer(30000, l1 -> { getCheckInfo(tc, checkId, critical -> { tc.assertEquals(CheckStatus.CRITICAL, critical.getStatus()); vertx.setTimer(90000, l2 -> { ctx.writeClient().localChecks(tc.asyncAssertSuccess(checks -> { tc.assertEquals(checks.stream().filter(c -> c.getName().equals("checkName")).count(), (long) 0); async.complete(); })); }); }); }); }); }); }
@Test public void ttlCheckLifecycle(TestContext tc) { CheckOptions opts = new CheckOptions() .setTtl("2s") .setName(randomAlphaString(10)); String checkId = createCheck(opts); Check check; runAsync(h -> ctx.writeClient().warnCheckWithNote(checkId, "warn", h)); check = getCheckInfo(checkId); assertEquals(CheckStatus.WARNING, check.getStatus()); assertEquals("warn", check.getOutput()); runAsync(h -> ctx.writeClient().failCheckWithNote(checkId, "fail", h)); check = getCheckInfo(checkId); assertEquals(CheckStatus.CRITICAL, check.getStatus()); assertEquals("fail", check.getOutput()); runAsync(h -> ctx.writeClient().passCheckWithNote(checkId, "pass", h)); check = getCheckInfo(checkId); assertEquals(CheckStatus.PASSING, check.getStatus()); assertEquals("pass", check.getOutput()); sleep(vertx, 3000); check = getCheckInfo(checkId); assertEquals(CheckStatus.CRITICAL, check.getStatus()); runAsync(h -> ctx.writeClient().deregisterCheck(checkId, h)); }
@Test public void watchService() throws InterruptedException { StateConsumer<String> consumer = new StateConsumer<>(); ServiceOptions service = new ServiceOptions() .setCheckOptions(new CheckOptions() .setStatus(CheckStatus.PASSING) .setTtl("4s") .setName(randomAlphaString(10))) .setId(randomAlphaString(10)) .setName(randomAlphaString(10)); Watch<ServiceEntryList> watch = Watch.service(service.getName(), vertx, ctx.readClientOptions()) .setHandler(list -> { if (list.succeeded()) { consumer.consume(list.nextResult().getList() .stream().filter(s -> s.getService().getName().equals(service.getName())) .map(e -> e.getService().getName() + "/" + e.getChecks().stream() .filter(c -> c.getId().equals("service:" + service.getId())) .map(c -> c.getStatus().name()).findFirst().orElse("")) .findFirst().orElse("")); } }) .start(); consumer.await(""); runAsync(h -> ctx.writeClient().registerService(service, h)); consumer.await(service.getName() + "/" + CheckStatus.PASSING.name()); consumer.await(service.getName() + "/" + CheckStatus.CRITICAL.name()); consumer.check(); watch.stop(); runAsync(h -> ctx.writeClient().deregisterService(service.getId(), h)); }
Check getCheckInfo(String id) { List<Check> checks = getAsync(h -> ctx.writeClient().localChecks(h)); return checks.stream() .filter(check -> check.getId().equals(id)) .findFirst() .get(); }
public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, CheckList obj) { for (java.util.Map.Entry<String, Object> member : json) { switch (member.getKey()) { case "index": if (member.getValue() instanceof Number) { obj.setIndex(((Number)member.getValue()).longValue()); } break; case "list": if (member.getValue() instanceof JsonArray) { java.util.ArrayList<io.vertx.ext.consul.Check> list = new java.util.ArrayList<>(); ((Iterable<Object>)member.getValue()).forEach( item -> { if (item instanceof JsonObject) list.add(new io.vertx.ext.consul.Check((JsonObject)item)); }); obj.setList(list); } break; } } }
List<ServiceEntry> serviceEntries = list.stream() .filter(serviceEntry -> serviceEntry.getChecks().stream().allMatch(check -> isCheckOK(check.getStatus()))
void getCheckInfo(TestContext tc, String id, Handler<Check> resultHandler) { ctx.writeClient().localChecks(tc.asyncAssertSuccess(list -> { resultHandler.handle(list.stream() .filter(check -> check.getId().equals(id)) .findFirst() .orElseThrow(NoSuchElementException::new)); })); }
public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, ServiceEntry obj) { for (java.util.Map.Entry<String, Object> member : json) { switch (member.getKey()) { case "checks": if (member.getValue() instanceof JsonArray) { java.util.ArrayList<io.vertx.ext.consul.Check> list = new java.util.ArrayList<>(); ((Iterable<Object>)member.getValue()).forEach( item -> { if (item instanceof JsonObject) list.add(new io.vertx.ext.consul.Check((JsonObject)item)); }); obj.setChecks(list); } break; case "node": if (member.getValue() instanceof JsonObject) { obj.setNode(new io.vertx.ext.consul.Node((JsonObject)member.getValue())); } break; case "service": if (member.getValue() instanceof JsonObject) { obj.setService(new io.vertx.ext.consul.Service((JsonObject)member.getValue())); } break; } } }
case "id": if (member.getValue() instanceof String) { obj.setId((String)member.getValue()); obj.setName((String)member.getValue()); obj.setNodeName((String)member.getValue()); obj.setNotes((String)member.getValue()); obj.setOutput((String)member.getValue()); obj.setServiceId((String)member.getValue()); obj.setServiceName((String)member.getValue()); obj.setStatus(io.vertx.ext.consul.CheckStatus.valueOf((String)member.getValue()));
private void checkCheck(Check expected, Check actual) { assertEquals(expected, actual); assertEquals(expected.hashCode(), actual.hashCode()); assertEquals(expected.getId(), actual.getId()); assertEquals(expected.getName(), actual.getName()); assertEquals(expected.getNodeName(), actual.getNodeName()); assertEquals(expected.getNotes(), actual.getNotes()); assertEquals(expected.getOutput(), actual.getOutput()); assertEquals(expected.getServiceId(), actual.getServiceId()); assertEquals(expected.getServiceName(), actual.getServiceName()); assertEquals(expected.getStatus(), actual.getStatus()); }
@Test public void scriptCheckLifecycle() { ScriptHealthReporter reporter = new ScriptHealthReporter(); CheckOptions opts = new CheckOptions() .setScriptArgs(reporter.scriptArgs()) .setInterval("2s") .setName("checkName"); String checkId = createCheck(opts); sleep(vertx, 3000); Check check = getCheckInfo(checkId); assertEquals(CheckStatus.PASSING, check.getStatus()); reporter.setStatus(CheckStatus.WARNING); sleep(vertx, 3000); check = getCheckInfo(checkId); assertEquals(CheckStatus.WARNING, check.getStatus()); reporter.setStatus(CheckStatus.CRITICAL); sleep(vertx, 3000); check = getCheckInfo(checkId); assertEquals(CheckStatus.CRITICAL, check.getStatus()); runAsync(h -> ctx.writeClient().deregisterCheck(checkId, h)); }
assertEquals(list1.getList().get(0).getId(), "checkId1");