@Override public void getRecords(Function<Record, Boolean> filter, boolean includeOutOfService, Handler<AsyncResult<List<Record>>> resultHandler) { Objects.requireNonNull(filter); backend.getRecords(list -> { if (list.failed()) { resultHandler.handle(Future.failedFuture(list.cause())); } else { resultHandler.handle(Future.succeededFuture( list.result().stream() .filter(filter::apply) .filter(record -> includeOutOfService || record.getStatus() == Status.UP) .collect(Collectors.toList()) )); } }); }
@Override public void getRecords(Function<Record, Boolean> filter, boolean includeOutOfService, Handler<AsyncResult<List<Record>>> resultHandler) { Objects.requireNonNull(filter); backend.getRecords(list -> { if (list.failed()) { resultHandler.handle(Future.failedFuture(list.cause())); } else { resultHandler.handle(Future.succeededFuture( list.result().stream() .filter(filter::apply) .filter(record -> includeOutOfService || record.getStatus() == Status.UP) .collect(Collectors.toList()) )); } }); }
@Override public void getRecord(Function<Record, Boolean> filter, boolean includeOutOfService, Handler<AsyncResult<Record>> resultHandler) { Objects.requireNonNull(filter); backend.getRecords(list -> { if (list.failed()) { resultHandler.handle(Future.failedFuture(list.cause())); } else { Optional<Record> any = list.result().stream() .filter(filter::apply) .filter(record -> includeOutOfService || record.getStatus() == Status.UP) .findAny(); if (any.isPresent()) { resultHandler.handle(Future.succeededFuture(any.get())); } else { resultHandler.handle(Future.succeededFuture(null)); } } }); }
private void successLog(final Record record) { final String key = this.getID(record); final String id = record.getRegistration(); final String endpoint = MessageFormat.format("http://{0}:{1}{2}", record.getLocation().getString(Origin.HOST), String.valueOf(record.getLocation().getInteger(Origin.PORT)), record.getMetadata().getString(Origin.PATH)); LOGGER.debug(Info.REG_SUCCESS, record.getStatus(), record.getType(), record.getName(), endpoint, key, id); }
private void successLog(final Record record) { final String key = this.getID(record); final String id = record.getRegistration(); final String endpoint = MessageFormat.format("http://{0}:{1}{2}", record.getLocation().getString(Origin.HOST), String.valueOf(record.getLocation().getInteger(Origin.PORT)), record.getMetadata().getString(Origin.PATH)); LOGGER.debug(Info.REG_SUCCESS, record.getStatus(), record.getType(), record.getName(), endpoint, key, id); }
@Test public void testPublicationWithoutStatus() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost"); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.UP); }
@Test public void testPublicationWithoutStatus() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost"); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.UP); }
@Test public void testPublicationWithStatusOutOfService() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.OUT_OF_SERVICE); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.OUT_OF_SERVICE); }
@Test public void testPublicationWithStatusUp() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.UP); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.UP); }
@Test public void testPublicationWithStatusDown() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.DOWN); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.DOWN); }
@Test public void testPublicationWithStatusUnknown() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.UNKNOWN); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.UP); }
@Test public void testPublicationWithStatusDown() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.DOWN); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.DOWN); }
@Test public void testPublicationWithStatusUp() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.UP); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.UP); }
@Test public void testPublicationWithStatusUnknown() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.UNKNOWN); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.UP); }
@Test public void testPublicationWithStatusOutOfService() { AtomicReference<Record> ref = new AtomicReference<>(); Record record = HttpEndpoint.createRecord("some-service", "localhost").setStatus(Status.OUT_OF_SERVICE); discovery.publish(record, ar -> { ref.set(ar.result()); }); await().untilAtomic(ref, is(notNullValue())); assertThat(ref.get().getRegistration()).isNotNull(); assertThat(ref.get().getStatus()).isEqualTo(Status.OUT_OF_SERVICE); }
private void registerSchemaEventConsumers( ServiceDiscoveryOptions options, SchemaPublishedHandler<SchemaRegistration> publishedHandler, SchemaUnpublishedHandler<SchemaRegistration> unpublishedHandler) { SchemaAnnounceHandler announceHandler = record -> findRegistration(options.getName(), record.getName()).ifPresent(reg -> { if (Status.UP.equals(record.getStatus())) { publishedHandler.schemaPublished(reg); } else { unpublishedHandler.schemaUnpublished(reg); } }); consumerManager.registerConsumer(options.getAnnounceAddress(), announceHandler); }
@Test public void testRetrievingMissingRecord() { HelloService svc = new HelloServiceImpl("stuff"); ProxyHelper.registerService(HelloService.class, vertx, svc, "address"); Record record = new Record() .setName("Hello") .setLocation(new JsonObject().put(Record.ENDPOINT, "address")); discovery.publish(record, (r) -> { }); await().until(() -> record.getRegistration() != null); Record retrieved = retrieve(record.getRegistration()); assertThat(retrieved.getStatus()).isEqualTo(Status.UP); // Unregister it Restafari.Response response2 = delete("/discovery/" + record.getRegistration()); assertThat(response2.getStatusCode()).isEqualTo(204); Restafari.Response response = get("/discovery/" + record.getRegistration()); assertThat(response.getStatusCode()).isEqualTo(404); }
@Test public void testRetrievingMissingRecord() { HelloService svc = new HelloServiceImpl("stuff"); ProxyHelper.registerService(HelloService.class, vertx, svc, "address"); Record record = new Record() .setName("Hello") .setLocation(new JsonObject().put(Record.ENDPOINT, "address")); discovery.publish(record, (r) -> { }); await().until(() -> record.getRegistration() != null); Record retrieved = retrieve(record.getRegistration()); assertThat(retrieved.getStatus()).isEqualTo(Status.UP); // Unregister it Restafari.Response response2 = delete("/discovery/" + record.getRegistration()); assertThat(response2.getStatusCode()).isEqualTo(204); Restafari.Response response = get("/discovery/" + record.getRegistration()); assertThat(response.getStatusCode()).isEqualTo(404); }
@Test public void testUpdateWithUUIDMismatch() throws UnsupportedEncodingException { HelloService svc = new HelloServiceImpl("stuff"); ProxyHelper.registerService(HelloService.class, vertx, svc, "address"); Record record = new Record() .setName("Hello") .setLocation(new JsonObject().put(Record.ENDPOINT, "address")); discovery.publish(record, (r) -> { }); await().until(() -> record.getRegistration() != null); Record retrieved = retrieve(record.getRegistration()); assertThat(retrieved.getStatus()).isEqualTo(Status.UP); retrieved.setStatus(Status.OUT_OF_SERVICE).setRegistration("not-the-right-one").getMetadata().put("foo", "bar"); Restafari.Response response = given().body(retrieved.toJson().toString()) .put("/discovery/" + record.getRegistration()); assertThat(response.getStatusCode()).isEqualTo(400); }
@Test public void testUpdateWithUUIDMismatch() throws UnsupportedEncodingException { HelloService svc = new HelloServiceImpl("stuff"); ProxyHelper.registerService(HelloService.class, vertx, svc, "address"); Record record = new Record() .setName("Hello") .setLocation(new JsonObject().put(Record.ENDPOINT, "address")); discovery.publish(record, (r) -> { }); await().until(() -> record.getRegistration() != null); Record retrieved = retrieve(record.getRegistration()); assertThat(retrieved.getStatus()).isEqualTo(Status.UP); retrieved.setStatus(Status.OUT_OF_SERVICE).setRegistration("not-the-right-one").getMetadata().put("foo", "bar"); Restafari.Response response = given().body(retrieved.toJson().toString()) .put("/discovery/" + record.getRegistration()); assertThat(response.getStatusCode()).isEqualTo(400); }