.setType("eventbus-service-proxy") .setLocation(new JsonObject().put("endpoint", "the-service-address")) .setName("my-service") .setMetadata(new JsonObject().put("some-label", "some-value"));
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; }
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; }
/** * Convenient method to create a record for a Redis data source. * * @param name the service name * @param location the location of the service (e.g. url, port...) * @param metadata additional metadata * @return the created record */ 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; }
/** * Convenient method to create a record for a Mongo data source. * * @param name the service name * @param location the location of the service (e.g. url, port...) * @param metadata additional metadata * @return the created record */ 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; }
/** * Convenient method to create a record for a Redis data source. * * @param name the service name * @param location the location of the service (e.g. url, port...) * @param metadata additional metadata * @return the created record */ 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; }
/** * Convenient method to create a record for a Mongo data source. * * @param name the service name * @param location the location of the service (e.g. url, port...) * @param metadata additional metadata * @return the created record */ 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 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(); }
@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(); }
@Test public void testMatch() { Record record = new Record().setName("Name"); assertThat(record.match(new JsonObject().put("name", "Name"))).isTrue(); assertThat(record.match(new JsonObject().put("name", "Name-2"))).isFalse(); record.setStatus(Status.UP); assertThat(record.match(new JsonObject().put("status", "Up"))).isTrue(); assertThat(record.match(new JsonObject().put("status", "Down"))).isFalse(); assertThat(record.match(new JsonObject().put("status", "Up").put("name", "Name"))).isTrue(); assertThat(record.match(new JsonObject().put("status", "Down").put("name", "Name"))).isFalse(); record.setRegistration("the-registration"); assertThat(record.match(new JsonObject().put("registration", "the-registration"))).isTrue(); assertThat(record.match(new JsonObject().put("registration", "wrong"))).isFalse(); record.getMetadata().put("foo", "bar").put("key", 2); assertThat(record.match(new JsonObject().put("foo", "bar"))).isTrue(); assertThat(record.match(new JsonObject().put("foo", "bar2"))).isFalse(); assertThat(record.match(new JsonObject().put("foo", "bar").put("other", "nope"))).isFalse(); assertThat(record.match(new JsonObject().put("foo", "bar").put("other", "*"))).isFalse(); assertThat(record.match(new JsonObject().put("foo", "bar").put("key", 2))).isTrue(); assertThat(record.match(new JsonObject().put("foo", "*").put("key", 2))).isTrue(); }
@Test public void should_Fail_Service_Proxy_With_Record_Of_Wrong_Type(TestContext context) { GraphQLClient.getSchemaProxy(discovery, new Record().setName("DroidQueries"), context.asyncAssertFailure(ex -> assertEquals("Record 'DroidQueries' is of wrong type 'null'. Expected: graphql-service", ex.getMessage()) )); }
@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()) )); }
@Before public void setUp() { vertx = Vertx.vertx(); options = new ServiceDiscoveryOptions().setName("theDiscovery") .setAnnounceAddress("theAnnounceAddress").setUsageAddress("theUsageAddress"); discovery = ServiceDiscovery.create(vertx, options); record = new Record() .setName("theRecord") .setType(Queryable.SERVICE_TYPE) .setMetadata(new JsonObject().put("publisherId", "thePublisherId")) .setLocation(new JsonObject().put(Record.ENDPOINT, Queryable.ADDRESS_PREFIX + ".DroidQueries")) .setStatus(Status.UP); definition = SchemaDefinition.createInstance(droidsSchema, SchemaMetadata.create(new JsonObject().put("publisherId", "thePublisherId"))); consumer = ProxyHelper.registerService(Queryable.class, vertx, definition, Queryable.ADDRESS_PREFIX + ".DroidQueries"); }
@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); }
@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); }
@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()) )); } }
@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); }