public static AvroUser create(CompiledSchema<Schema> schema, byte[] bytes) { try { return new AvroUser(schema, bytes); } catch (IOException ex) { throw new UncheckedIOException(ex); } }
public String asAvroEncodedJson() { return asAvroEncodedTestMessage().toString(); }
public String asJson() { return asTestMessage().toString(); }
public TestMessage asTestMessage() { return TestMessage.of(NAME_FIELD, getName()).append(AGE_FIELD, getAge()).append(FAVORITE_COLOR_FIELD, getFavoriteColor()); }
@Test public void shouldConvertToJsonWithoutMetadata() throws IOException { // given Topic topic = topic("group.topic").build(); AvroUser avroUser = new AvroUser("Bob", 18, "blue"); Message source = message() .withData(avroUser.asBytes()) .withSchema(new CompiledSchema<>(avroUser.getSchema(), SchemaVersion.valueOf(0))) .withExternalMetadata(of()) .build(); AvroToJsonMessageConverter converter = new AvroToJsonMessageConverter(); // when Message target = converter.convert(source, topic); // then assertThatJson(new String(target.getData())).isEqualTo("{\"name\": \"Bob\", \"age\": 18, \"favoriteColor\": \"blue\"}"); }
@Test public void shouldConvertToAvroWhenReceivedAvroJSONOnAvroTopic() throws IOException { // when byte[] enforcedMessage = enforcer.enforceAvro("avro/json", avroMessage.asAvroEncodedJson().getBytes(), schema.getSchema(), topic); // then assertThat(enforcedMessage).isEqualTo(avroMessage.asBytes()); }
@Test public void shouldWrapAndUnwrapAvroMessageWithMetadata() throws IOException { // when byte [] wrappedMessage = avroMessageContentWrapper.wrapContent(content, id, timestamp, avroUser.getSchema(), Collections.emptyMap()); UnwrappedMessageContent unwrappedMessageContent = avroMessageContentWrapper.unwrapContent(wrappedMessage, avroUser.getCompiledSchema()); // then assertThat(unwrappedMessageContent.getMessageMetadata().getId()).isEqualTo(id); assertThat(unwrappedMessageContent.getMessageMetadata().getTimestamp()).isEqualTo(timestamp); assertThat(unwrappedMessageContent.getContent()).contains(content); }
public AvroUser(CompiledSchema<Schema> schema, String name, int age, String favouriteColour) { this.schema = schema; this.record = create(name, age, favouriteColour); }
@Test @SuppressWarnings("unchecked") public void shouldWrappedMessageContainsMetadata() throws IOException { // when byte[] wrappedMessage = avroMessageContentWrapper.wrapContent(content, id, timestamp, avroUser.getSchema(), Collections.emptyMap()); // then GenericRecord messageWithMetadata = bytesToRecord(wrappedMessage, avroUser.getSchema()); Map<Utf8, Utf8> metadata = (Map<Utf8, Utf8>) messageWithMetadata.get(METADATA_MARKER); assertThat(metadata.get(METADATA_MESSAGE_ID_KEY).toString()).isEqualTo(id); assertThat(valueOf(metadata.get(METADATA_TIMESTAMP_KEY).toString())).isEqualTo(timestamp); assertThat(wrappedMessage).contains(content); }
public TestMessage asTestMessage() { return TestMessage.of(NAME_FIELD, getName()).append(AGE_FIELD, getAge()).append(FAVORITE_COLOR_FIELD, getFavoriteColor()); }
public void shouldUnwrapMessageWrappedWithSchemaAtVersion(MessageContentWrapper wrapper, int schemaVersion, boolean wrapWithSchemaVersionAwarePayload, boolean unwrapWithSchemaVersionAwarePayload, int missedSchemaVersionInPayload, int errorsForPayloadWithSchemaVersion, int errorsForAnySchemaVersion, int errorsForAnyOnlineSchemaVersion) { // given SchemaVersion version = SchemaVersion.valueOf(schemaVersion); Topic topicToWrap = createTopic("group", "topic", wrapWithSchemaVersionAwarePayload); Topic topicToUnwrap = createTopic("group", "topic", unwrapWithSchemaVersionAwarePayload); CompiledSchema<Schema> schema = schemaRepository.getKnownAvroSchemaVersion(topicToWrap, version); AvroUser user = new AvroUser(schema, "Bob", 15, "blue"); byte[] wrapped = wrapper.wrapAvro(user.asBytes(), "uniqueId", 1234, topicToWrap, schema, new HashedMap<>()); // when UnwrappedMessageContent unwrappedMessageContent = wrapper.unwrapAvro(wrapped, topicToUnwrap); // then assertThat(unwrappedMessageContent.getContent()).contains(user.asBytes()); assertThat(unwrappedMessageContent.getSchema().get().getVersion()).isEqualTo(version); assertThat(unwrappedMessageContent.getMessageMetadata().getId()).isEqualTo("uniqueId"); assertThat(unwrappedMessageContent.getMessageMetadata().getTimestamp()).isEqualTo(1234); assertThat(metrics.missedSchemaVersionInPayload().getCount()).isEqualTo(missedSchemaVersionInPayload); assertThat(metrics.errorsForSchemaVersionAwarePayload().getCount()).isEqualTo(errorsForPayloadWithSchemaVersion); assertThat(metrics.errorsForAnySchemaVersion().getCount()).isEqualTo(errorsForAnySchemaVersion); assertThat(metrics.errorsForAnyOnlineSchemaVersion().getCount()).isEqualTo(errorsForAnyOnlineSchemaVersion); }
@Test public void shouldStringContentTypeOfAdditionalOptionsWhenInterpretingIt() throws IOException { // when byte[] enforcedMessage = enforcer.enforceAvro("application/json;encoding=utf-8", avroMessage.asJson().getBytes(), schema.getSchema(), topic); // then assertThat(enforcedMessage).isEqualTo(avroMessage.asBytes()); }
@Test public void shouldUnwrapAvroMessageAndGenerateMetadataWhenNotExists() throws Throwable { //given byte [] wrappedMessage = wrapContentWithoutMetadata(content, avroUser.getSchema()); //when UnwrappedMessageContent unwrappedMessage = avroMessageContentWrapper.unwrapContent(wrappedMessage, avroUser.getCompiledSchema()); //then assertThat(unwrappedMessage.getMessageMetadata().getId()).isEmpty(); assertThat(unwrappedMessage.getMessageMetadata().getTimestamp()).isNotNull(); assertThat(unwrappedMessage.getContent()).startsWith(content); }
public AvroUser(CompiledSchema<Schema> schema, String name, int age, String favouriteColour) { this.schema = schema; this.record = create(name, age, favouriteColour); }
public TestMessage asAvroEncodedTestMessage() { Object favoriteColorType = ofNullable(getFavoriteColor()).map(color -> (Object)ImmutableMap.of("string", color)).orElse("null"); return TestMessage.of(METADATA_FIELD, null).append(NAME_FIELD, getName()).append(AGE_FIELD, getAge()).append(FAVORITE_COLOR_FIELD, favoriteColorType); }