Record record1 = new Record() .setType("eventbus-service-proxy") .setLocation(new JsonObject().put("endpoint", "the-service-address")) .setName("my-service") .setMetadata(new JsonObject().put("some-label", "some-value")); System.out.println("\"" + record1.getName() + "\" successfully published!"); Record publishedRecord = ar.result(); } else { System.out.println("\"" + record2.getName() + "\" successfully published!"); Record publishedRecord = ar.result(); } else { discovery.unpublish(record1.getRegistration(), ar -> { if (ar.succeeded()) { System.out.println("\"" + record1.getName() + "\" successfully unpublished"); } else { discovery.getRecord(r -> r.getName().equals(record2.getName()), ar -> { if (ar.succeeded()) { if (ar.result() != null) { System.out.println("Consuming \"" + record2.getName() + "\"");
@Test public void testHttpRecordCreation() { Service service = getHttpService(); Record record = KubernetesServiceImporter.createRecord(new JsonObject(Json.encodeToBuffer(service))); assertThat(record).isNotNull(); assertThat(record.getName()).isEqualTo("my-service"); assertThat(record.getMetadata().getString("kubernetes.name")).isEqualTo("my-service"); assertThat(record.getMetadata().getString("kubernetes.namespace")).isEqualTo("my-project"); assertThat(record.getMetadata().getString("kubernetes.uuid")).isEqualTo("uuid"); assertThat(record.getType()).isEqualTo(HttpEndpoint.TYPE); assertThat(record.getLocation().getInteger("port")).isEqualTo(8080); assertThat(record.getLocation().getBoolean("ssl")).isFalse(); }
static Record createRecord(String name, JsonObject location, JsonObject metadata) { Objects.requireNonNull(name); Objects.requireNonNull(location); Record record = new Record().setName(name) .setType(TYPE) .setLocation(location); if (metadata != null) { record.setMetadata(metadata); } return record; }
@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); }
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); }
@Override public boolean erasing(final Record record) { final String host = record.getLocation().getString(HOST); final Integer port = record.getLocation().getInteger(PORT); final String name = record.getName(); if (!Ut.netOk(host, port)) { this.registry.erasingStatus(name, host, port, this.getPath()); } return true; }
@Test public void testFailedPublication() { HelloService svc = new HelloServiceImpl("stuff"); ProxyHelper.registerService(HelloService.class, vertx, svc, "address"); Record record = new Record() .setName("Hello") .setRegistration("this-is-not-allowed") .setLocation(new JsonObject().put(Record.ENDPOINT, "address")); Restafari.Response response = given().request().body(record.toJson().toString()).post("/discovery"); assertThat(response.getStatusCode()).isEqualTo(500); }
@Override public void start() { Router router = Router.router(vertx); router.get("/").handler(this::invoke); // Retrieve the service discovery ServiceDiscovery.create(vertx, discovery -> // Retrieve a web client HttpEndpoint.getWebClient(discovery, svc -> svc.getName().equals("vertx-greeting"), ar -> { if (ar.failed()) { System.out.println("D'oh the service is not available"); } else { client = ar.result(); vertx.createHttpServer().requestHandler(router).listen(8080); } })); }
private void assertRedis(Record record) { assertThat(record.getName()).isEqualTo("DISCOVERY_REDIS"); assertThat(record.getLocation().getString("endpoint")).isEqualToIgnoringCase("tcp://172.17.0.2:6379"); assertThat(record.getMetadata().getString("PORT_6379_TCP_PORT")).isEqualToIgnoringCase("6379"); }
@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); }
private boolean areTheSameService(Record record1, Record record2) { String uuid = record1.getMetadata().getString(KUBERNETES_UUID, ""); String uuid2 = record2.getMetadata().getString(KUBERNETES_UUID, ""); String endpoint = record1.getLocation().getString(Record.ENDPOINT, ""); String endpoint2 = record2.getLocation().getString(Record.ENDPOINT, ""); // Check the uuid and location return uuid.equals(uuid2) && endpoint.equals(endpoint2); }
@Test public void TestTypeMatch() { Record record = new Record().setName("Name").setType(HttpEndpoint.TYPE); assertThat(record.match(new JsonObject().put("name", "Name").put("type", "any"))).isFalse(); assertThat(record.match(new JsonObject().put("name", "Name").put("type", HttpEndpoint.TYPE))).isTrue(); assertThat(record.match(new JsonObject().put("type", HttpEndpoint.TYPE))).isTrue(); assertThat(record.match(new JsonObject().put("name", "Name").put("type", "*"))).isTrue(); }
@Override public void remove(Record record, Handler<AsyncResult<Record>> resultHandler) { Objects.requireNonNull(record.getRegistration(), MESSAGE_NO_REG_ID); remove(record.getRegistration(), resultHandler); }
@Test public void should_Fail_Service_Proxy_With_Record_Not_Registered(TestContext context) { GraphQLClient.getSchemaProxy(discovery, new Record() .setName("DroidQueries").setType(Queryable.SERVICE_TYPE).setStatus(Status.UP), context.asyncAssertFailure(ex -> assertEquals("Record 'DroidQueries' has no service discovery registration", ex.getMessage()) )); } }
@Override public ConcurrentMap<String, Record> getRegistryData() { final ConcurrentMap<String, Record> map = this.readData(EtcdPath.IPC); for (final Record record : map.values()) { record.setStatus(Status.UP); record.setType("IPC"); // Alpn Enabled for Rpc, ssl must be true. record.getLocation().put("ssl", Boolean.TRUE); } return map; }
@Override public void update(Record record, Handler<AsyncResult<Void>> resultHandler) { Objects.requireNonNull(record.getRegistration(), "No registration id in the record"); redis.hset(key, record.getRegistration(), record.toJson().encode(), ar -> { if (ar.succeeded()) { resultHandler.handle(Future.succeededFuture()); } else { resultHandler.handle(Future.failedFuture(ar.cause())); } }); }
@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 should_Fail_Service_Proxy_With_Record_Status_Not_UP(TestContext context) { GraphQLClient.getSchemaProxy(discovery, new Record() .setName("DroidQueries").setType(Queryable.SERVICE_TYPE), context.asyncAssertFailure(ex -> assertEquals("Record status indicates service 'DroidQueries' is: UNKNOWN. Expected: UP", ex.getMessage()) )); }