/** * Publishes the schema definition to the service discovery indicated by the provided schema publisher options. * * @param options the service discovery options * @param schema the GraphQL schema to publish * @param resultHandler the result handler */ default void publish(ServiceDiscoveryOptions options, GraphQLSchema schema, Handler<AsyncResult<SchemaRegistration>> resultHandler) { publish(options, schema, SchemaMetadata.create(), resultHandler); }
protected SchemaDefinition(GraphQLSchema schema, SchemaMetadata metadata) { this.schema = schema; this.schemaMetadata = metadata == null ? SchemaMetadata.create() : metadata; this.schemaName = schemaMetadata.getSchemaName() == null || schemaMetadata.getSchemaName().isEmpty() ? schema.getQueryType().getName() : schemaMetadata.getSchemaName(); this.serviceAddress = schemaMetadata.getServiceAddress() == null || schemaMetadata.getServiceAddress().isEmpty() ? Queryable.ADDRESS_PREFIX + "." + schemaName() : schemaMetadata.getServiceAddress(); schemaMetadata.put(SchemaMetadata.METADATA_QUERIES, schema.getQueryType().getFieldDefinitions().stream() .map(GraphQLFieldDefinition::getName).collect(Collectors.toList())); schemaMetadata.put(SchemaMetadata.METADATA_MUTATIONS, !schema.isSupportingMutations() ? Collections.emptyList() : schema.getMutationType().getFieldDefinitions().stream() .map(GraphQLFieldDefinition::getName).collect(Collectors.toList())); }
@Test public void should_Publish_Schema_Definition_With_Metadata(TestContext context) { Async async = context.async(); SchemaMetadata metadata = SchemaMetadata.create(new JsonObject() .put("someString", "someValue").put("someObject", new JsonObject())); GraphQLService.publish(vertx, discovery, starWarsSchema, options, metadata, rh -> { context.assertTrue(rh.succeeded()); Record record = rh.result().getRecord(); context.assertEquals("someValue", record.getMetadata().getString("someString")); context.assertEquals(new JsonObject(), record.getMetadata().getJsonObject("someObject")); // Check standard metadata that is added (for future use) JsonArray queries = record.getMetadata().getJsonArray(SchemaRegistration.METADATA_QUERIES); JsonArray mutations = record.getMetadata().getJsonArray(SchemaRegistration.METADATA_MUTATIONS); context.assertEquals(new JsonArray("[ \"hero\", \"human\" ]"), queries); context.assertEquals(new JsonArray(), mutations); async.complete(); }); }
@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 should_Manage_Service_Consumers() { SchemaDefinition definition = SchemaDefinition .createInstance(droidsSchema, SchemaMetadata.create()); messageConsumers.registerServiceConsumer("DroidQueries", definition); assertEquals(1, messageConsumers.getConsumers().size()); assertTrue(messageConsumers.getConsumers().get("DroidQueries").isRegistered()); messageConsumers.registerServiceConsumer("DroidQueries", definition); assertEquals(1, messageConsumers.getConsumers().size()); messageConsumers.unregisterConsumer("DroidQueries"); assertEquals(1, messageConsumers.getConsumers().size()); messageConsumers.registerConsumer("announce", (SchemaAnnounceHandler) rh -> {}); assertEquals(2, messageConsumers.getConsumers().size()); messageConsumers.unregisterConsumer("DroidQueries"); assertEquals(1, messageConsumers.getConsumers().size()); messageConsumers.close(); assertEquals(0, messageConsumers.getConsumers().size()); }
@Test public void should_Implement_Proper_Reference_Equality() { SchemaRegistration registration1 = SchemaRegistration.create(discovery, options, record, definition, null); assertEquals(registration1, registration1); assertNotEquals(registration1, "test"); SchemaRegistration registration2 = SchemaRegistration.create(discovery, new ServiceDiscoveryOptions(options).setName("theOtherDiscovery"), record, definition, null); assertNotEquals(registration1, registration2); SchemaRegistration registration3 = SchemaRegistration.create(discovery, new ServiceDiscoveryOptions(options).setName("theOtherDiscovery"), record, definition, consumer); assertNotEquals(registration2, registration3); SchemaDefinition starwarsSchema = SchemaDefinition .createInstance(starWarsSchema, SchemaMetadata.create()); SchemaRegistration registration4 = SchemaRegistration.create(discovery, options, record, starwarsSchema, null); assertNotEquals(registration1, registration4); SchemaRegistration registration5 = SchemaRegistration. create(discovery, options, new Record(record).setName("theOtherRecord"), starwarsSchema, null); assertNotEquals(registration4, registration5); SchemaRegistration registration6 = SchemaRegistration. create(discovery, options, new Record(record).setStatus(Status.DOWN), starwarsSchema, null); assertEquals(registration4, registration6); }