Search in sources :

Example 1 with Schema

use of com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema in project registry by hortonworks.

the class ConfluentRegistryCompatibleResourceTest method testConfluentApis.

@Test
public void testConfluentApis() throws Exception {
    List<String> schemas = Arrays.stream(new String[] { "/device.avsc", "/device-compat.avsc", "/device-incompat.avsc" }).map(x -> {
        try {
            return fetchSchema(x);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }).collect(Collectors.toList());
    ObjectMapper objectMapper = new ObjectMapper();
    List<String> subjects = new ArrayList<>();
    for (String schemaText : schemas) {
        String subjectName = UUID.randomUUID().toString();
        subjects.add(subjectName);
        // check post schema version
        Long schemaId = objectMapper.readValue(postSubjectSchema(subjectName, schemaText).readEntity(String.class), Id.class).getId();
        // check get version api
        Schema schemaVersionEntry = getVersion(subjectName, "latest");
        Assert.assertEquals(subjectName, schemaVersionEntry.getSubject());
        Assert.assertEquals(schemaId.intValue(), schemaVersionEntry.getId().intValue());
        org.apache.avro.Schema recvdSchema = new org.apache.avro.Schema.Parser().parse(schemaVersionEntry.getSchema());
        org.apache.avro.Schema regdSchema = new org.apache.avro.Schema.Parser().parse(schemaText);
        Assert.assertEquals(regdSchema, recvdSchema);
    }
    // check all registered subjects
    List<String> recvdSubjects = getAllSubjects();
    Assert.assertEquals(new HashSet<>(subjects), new HashSet<>(recvdSubjects));
}
Also used : GenericRecordBuilder(org.apache.avro.generic.GenericRecordBuilder) Arrays(java.util.Arrays) LocalSchemaRegistryServer(com.hortonworks.registries.schemaregistry.webservice.LocalSchemaRegistryServer) KafkaAvroSerializer(io.confluent.kafka.serializers.KafkaAvroSerializer) MultiPartFeature(org.glassfish.jersey.media.multipart.MultiPartFeature) LoggerFactory(org.slf4j.LoggerFactory) Client(javax.ws.rs.client.Client) HashMap(java.util.HashMap) Random(java.util.Random) Schema(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) ClientBuilder(javax.ws.rs.client.ClientBuilder) MediaType(javax.ws.rs.core.MediaType) TestName(org.junit.rules.TestName) After(org.junit.After) Map(java.util.Map) ConfluentSchemaRegistryCompatibleResource(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource) TypeReference(com.fasterxml.jackson.core.type.TypeReference) Id(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Id) ErrorMessage(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.ErrorMessage) Before(org.junit.Before) GENERIC_TEST_RECORD_SCHEMA(com.hortonworks.registries.schemaregistry.avro.ConfluentProtocolCompatibleTest.GENERIC_TEST_RECORD_SCHEMA) GenericRecord(org.apache.avro.generic.GenericRecord) Logger(org.slf4j.Logger) Resources(com.google.common.io.Resources) SchemaString(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.SchemaString) ConfluentSchemaRegistryCompatibleResource.subjectNotFoundError(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.subjectNotFoundError) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.Test) IOException(java.io.IOException) ClientProperties(org.glassfish.jersey.client.ClientProperties) UUID(java.util.UUID) AbstractKafkaAvroSerDeConfig(io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig) Entity(javax.ws.rs.client.Entity) Collectors(java.util.stream.Collectors) File(java.io.File) KafkaAvroDeserializer(io.confluent.kafka.serializers.KafkaAvroDeserializer) ConfluentSchemaRegistryCompatibleResource.incompatibleSchemaError(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.incompatibleSchemaError) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) Rule(org.junit.Rule) Response(javax.ws.rs.core.Response) ConfluentSchemaRegistryCompatibleResource.invalidSchemaError(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.invalidSchemaError) WebTarget(javax.ws.rs.client.WebTarget) Assert(org.junit.Assert) ConfluentSchemaRegistryCompatibleResource.versionNotFoundError(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.versionNotFoundError) Schema(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema) ArrayList(java.util.ArrayList) SchemaString(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.SchemaString) IOException(java.io.IOException) Id(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Id) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.Test)

Example 2 with Schema

use of com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema in project registry by hortonworks.

the class ConfluentRegistryCompatibleResourceTest method testConfluentSerDes.

@Test
public void testConfluentSerDes() throws Exception {
    org.apache.avro.Schema schema = new org.apache.avro.Schema.Parser().parse(GENERIC_TEST_RECORD_SCHEMA);
    GenericRecord record = new GenericRecordBuilder(schema).set("field1", "some value").set("field2", "some other value").build();
    Map<String, Object> config = new HashMap<>();
    config.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, rootTarget.getUri().toString());
    KafkaAvroSerializer kafkaAvroSerializer = new KafkaAvroSerializer();
    kafkaAvroSerializer.configure(config, false);
    byte[] bytes = kafkaAvroSerializer.serialize("topic", record);
    KafkaAvroDeserializer kafkaAvroDeserializer = new KafkaAvroDeserializer();
    kafkaAvroDeserializer.configure(config, false);
    GenericRecord result = (GenericRecord) kafkaAvroDeserializer.deserialize("topic", bytes);
    LOG.info(result.toString());
}
Also used : HashMap(java.util.HashMap) Schema(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema) KafkaAvroSerializer(io.confluent.kafka.serializers.KafkaAvroSerializer) KafkaAvroDeserializer(io.confluent.kafka.serializers.KafkaAvroDeserializer) SchemaString(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.SchemaString) GenericRecordBuilder(org.apache.avro.generic.GenericRecordBuilder) GenericRecord(org.apache.avro.generic.GenericRecord) Test(org.junit.Test)

Example 3 with Schema

use of com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema in project registry by hortonworks.

the class ConfluentRegistryCompatibleResourceTest method testSubjectWithVersionIdApi.

@Test
public void testSubjectWithVersionIdApi() throws Exception {
    String subject = testName();
    String response = postSubjectSchema(subject, fetchSchema("/device.avsc")).readEntity(String.class);
    ObjectMapper objectMapper = new ObjectMapper();
    long id = objectMapper.readValue(response, Id.class).getId();
    Assert.assertTrue(id > 0);
    String validResponse = rootTarget.path(String.format("/subjects/%s/versions/%s", subject, id)).request(MediaType.APPLICATION_JSON_TYPE).get(String.class);
    Schema schemaVersionEntry = new ObjectMapper().readValue(validResponse, Schema.class);
    Assert.assertEquals(subject, schemaVersionEntry.getSubject());
    Assert.assertEquals(id, schemaVersionEntry.getVersion().intValue());
    // invalid subject, valid version
    String invalidSubject = subject + new Random().nextInt();
    Response invalidSubjectResponse = rootTarget.path(String.format("/subjects/%s/versions/%s", invalidSubject, id)).request(MediaType.APPLICATION_JSON_TYPE).get();
    Assert.assertEquals(subjectNotFoundError().getEntity(), objectMapper.readValue(invalidSubjectResponse.readEntity(String.class), ErrorMessage.class));
    // valid subject, invalid versions
    String[] invalidVersions = { // non existing version
    id + 10 + "", // invalid version string
    "invalid-version", // invalid version number can not be <= 0
    -1 + "", // invalid version number can not be <= 0
    0 + "", // invalid version number, can not be > Integer.MAX_VALUE
    ((long) Integer.MAX_VALUE) + 10L + "" };
    for (String invalidVersion : invalidVersions) {
        Response invalidVersionResponse = rootTarget.path(String.format("/subjects/%s/versions/%s", subject, invalidVersion)).request(MediaType.APPLICATION_JSON_TYPE).get();
        Assert.assertEquals(versionNotFoundError().getEntity(), objectMapper.readValue(invalidVersionResponse.readEntity(String.class), ErrorMessage.class));
    }
}
Also used : Response(javax.ws.rs.core.Response) Random(java.util.Random) Schema(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema) SchemaString(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.SchemaString) Id(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Id) ErrorMessage(com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.ErrorMessage) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.Test)

Aggregations

Schema (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Schema)3 SchemaString (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.SchemaString)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 ErrorMessage (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.ErrorMessage)2 Id (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.Id)2 KafkaAvroDeserializer (io.confluent.kafka.serializers.KafkaAvroDeserializer)2 KafkaAvroSerializer (io.confluent.kafka.serializers.KafkaAvroSerializer)2 HashMap (java.util.HashMap)2 Random (java.util.Random)2 Response (javax.ws.rs.core.Response)2 GenericRecord (org.apache.avro.generic.GenericRecord)2 GenericRecordBuilder (org.apache.avro.generic.GenericRecordBuilder)2 Test (org.junit.Test)2 TypeReference (com.fasterxml.jackson.core.type.TypeReference)1 Resources (com.google.common.io.Resources)1 GENERIC_TEST_RECORD_SCHEMA (com.hortonworks.registries.schemaregistry.avro.ConfluentProtocolCompatibleTest.GENERIC_TEST_RECORD_SCHEMA)1 ConfluentSchemaRegistryCompatibleResource (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource)1 ConfluentSchemaRegistryCompatibleResource.incompatibleSchemaError (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.incompatibleSchemaError)1 ConfluentSchemaRegistryCompatibleResource.invalidSchemaError (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.invalidSchemaError)1 ConfluentSchemaRegistryCompatibleResource.subjectNotFoundError (com.hortonworks.registries.schemaregistry.webservice.ConfluentSchemaRegistryCompatibleResource.subjectNotFoundError)1