Search in sources :

Example 41 with Field

use of org.apache.kafka.connect.data.Field in project connect-utils by jcustenborder.

the class AssertStruct method assertStruct.

public static void assertStruct(final Struct expected, final Struct actual, String message) {
    String prefix = Strings.isNullOrEmpty(message) ? "" : message + ": ";
    if (null == expected) {
        assertNull(actual, prefix + "actual should be null.");
        return;
    }
    assertSchema(expected.schema(), actual.schema(), "schema does not match.");
    final Set<String> logicalTypes = ImmutableSet.of(Timestamp.LOGICAL_NAME, Date.LOGICAL_NAME, Time.LOGICAL_NAME, Decimal.LOGICAL_NAME);
    for (Field field : expected.schema().fields()) {
        log.trace("assertStruct() - testing field '{}'", field.name());
        final Object expectedValue = expected.get(field.name());
        final Object actualValue = actual.get(field.name());
        if (!Strings.isNullOrEmpty(field.schema().name()) && logicalTypes.contains(field.schema().name())) {
            assertEquals(expectedValue, actualValue, prefix + field.name() + " does not match.");
        } else {
            switch(field.schema().type()) {
                case ARRAY:
                    assertTrue(null == expectedValue || expectedValue instanceof List);
                    assertTrue(null == actualValue || actualValue instanceof List);
                    List<Object> expectedArray = (List<Object>) expectedValue;
                    List<Object> actualArray = (List<Object>) actualValue;
                    assertEquals(expectedArray, actualArray, prefix + field.name() + " does not match.");
                    break;
                case MAP:
                    assertTrue(null == expectedValue || expectedValue instanceof Map);
                    assertTrue(null == actualValue || actualValue instanceof Map);
                    Map<Object, Object> expectedMap = (Map<Object, Object>) expectedValue;
                    Map<Object, Object> actualMap = (Map<Object, Object>) actualValue;
                    assertEquals(expectedMap, actualMap, prefix + field.name() + " does not match.");
                    break;
                case STRUCT:
                    assertTrue(null == expectedValue || expectedValue instanceof Struct);
                    assertTrue(null == actualValue || actualValue instanceof Struct);
                    Struct expectedStruct = (Struct) expectedValue;
                    Struct actualStruct = (Struct) actualValue;
                    assertStruct(expectedStruct, actualStruct, prefix + field.name() + " does not match.");
                    break;
                case BYTES:
                    assertTrue(null == expectedValue || expectedValue instanceof byte[]);
                    assertTrue(null == actualValue || actualValue instanceof byte[]);
                    byte[] expectedByteArray = (byte[]) expectedValue;
                    byte[] actualByteArray = (byte[]) actualValue;
                    assertEquals(null == expectedByteArray ? "" : BaseEncoding.base32Hex().encode(expectedByteArray).toString(), null == actualByteArray ? "" : BaseEncoding.base32Hex().encode(actualByteArray).toString(), prefix + field.name() + " does not match.");
                    break;
                default:
                    assertEquals(expectedValue, actualValue, prefix + field.name() + " does not match.");
                    break;
            }
        }
    }
}
Also used : Field(org.apache.kafka.connect.data.Field) List(java.util.List) Map(java.util.Map) Struct(org.apache.kafka.connect.data.Struct)

Example 42 with Field

use of org.apache.kafka.connect.data.Field in project connect-utils by jcustenborder.

the class AssertSchema method assertSchema.

public static void assertSchema(final Schema expected, final Schema actual, String message) {
    final String prefix = Strings.isNullOrEmpty(message) ? "" : message + ": ";
    if (null == expected) {
        assertNull(actual, prefix + "actual should not be null.");
        return;
    }
    assertNotNull(expected, prefix + "expected schema should not be null.");
    assertNotNull(actual, prefix + "actual schema should not be null.");
    assertEquals(expected.name(), actual.name(), prefix + "schema.name() should match.");
    assertEquals(expected.type(), actual.type(), prefix + "schema.type() should match.");
    assertEquals(expected.defaultValue(), actual.defaultValue(), prefix + "schema.defaultValue() should match.");
    assertEquals(expected.isOptional(), actual.isOptional(), prefix + "schema.isOptional() should match.");
    assertEquals(expected.doc(), actual.doc(), prefix + "schema.doc() should match.");
    assertEquals(expected.version(), actual.version(), prefix + "schema.version() should match.");
    assertMap(expected.parameters(), actual.parameters(), prefix + "schema.parameters() should match.");
    if (null != expected.defaultValue()) {
        assertNotNull(actual.defaultValue(), "actual.defaultValue() should not be null.");
        Class<?> expectedType = null;
        switch(expected.type()) {
            case INT8:
                expectedType = Byte.class;
                break;
            case INT16:
                expectedType = Short.class;
                break;
            case INT32:
                expectedType = Integer.class;
                break;
            case INT64:
                expectedType = Long.class;
                break;
            case FLOAT32:
                expectedType = Float.class;
                break;
            case FLOAT64:
                expectedType = Float.class;
                break;
            default:
                break;
        }
        if (null != expectedType) {
            assertTrue(actual.defaultValue().getClass().isAssignableFrom(expectedType), String.format("actual.defaultValue() should be a %s", expectedType.getSimpleName()));
        }
    }
    switch(expected.type()) {
        case ARRAY:
            assertSchema(expected.valueSchema(), actual.valueSchema(), message + "valueSchema does not match.");
            break;
        case MAP:
            assertSchema(expected.keySchema(), actual.keySchema(), message + "keySchema does not match.");
            assertSchema(expected.valueSchema(), actual.valueSchema(), message + "valueSchema does not match.");
            break;
        case STRUCT:
            List<Field> expectedFields = expected.fields();
            List<Field> actualFields = actual.fields();
            assertEquals(expectedFields.size(), actualFields.size(), prefix + "Number of fields do not match.");
            for (int i = 0; i < expectedFields.size(); i++) {
                Field expectedField = expectedFields.get(i);
                Field actualField = actualFields.get(i);
                assertField(expectedField, actualField, "index " + i);
            }
            break;
    }
}
Also used : Field(org.apache.kafka.connect.data.Field)

Example 43 with Field

use of org.apache.kafka.connect.data.Field in project connect-utils by jcustenborder.

the class MarkdownFormatter method toMarkdown.

public static String toMarkdown(Schema schema) {
    Preconditions.checkNotNull(schema, "schema cannot be null.");
    StringBuilder builder = new StringBuilder();
    builder.append("## ");
    if (Strings.isNullOrEmpty(schema.name())) {
        builder.append(schema.type());
    } else {
        builder.append(schema.name());
    }
    if (!Strings.isNullOrEmpty(schema.doc())) {
        builder.append("\n\n");
        builder.append(schema.doc());
    }
    if (Schema.Type.STRUCT == schema.type()) {
        List<List<String>> rows = new ArrayList<>();
        rows.add(ImmutableList.of("Name", "Optional", "Schema", "Default Value", "Documentation"));
        for (Field field : schema.fields()) {
            Schema fieldSchema = field.schema();
            List<String> row = ImmutableList.of(field.name(), String.valueOf(fieldSchema.isOptional()), schema(fieldSchema), fieldSchema.defaultValue() == null ? "" : fieldSchema.defaultValue().toString(), Strings.isNullOrEmpty(fieldSchema.doc()) ? "" : fieldSchema.doc());
            rows.add(row);
        }
        builder.append("\n\n");
        builder.append(markdownTable(rows));
    } else if (Schema.Type.MAP == schema.type()) {
    } else {
    }
    return builder.toString();
}
Also used : Field(org.apache.kafka.connect.data.Field) Schema(org.apache.kafka.connect.data.Schema) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList)

Example 44 with Field

use of org.apache.kafka.connect.data.Field in project ksql by confluentinc.

the class JoinNodeTest method shouldHaveAllFieldsFromJoinedInputs.

@Test
public void shouldHaveAllFieldsFromJoinedInputs() {
    setupTopicClientExpectations(1, 1);
    buildJoin();
    final MetaStore metaStore = MetaStoreFixture.getNewMetaStore();
    final StructuredDataSource source1 = metaStore.getSource("TEST1");
    final StructuredDataSource source2 = metaStore.getSource("TEST2");
    final Set<String> expected = source1.getSchema().fields().stream().map(field -> "T1." + field.name()).collect(Collectors.toSet());
    expected.addAll(source2.getSchema().fields().stream().map(field -> "T2." + field.name()).collect(Collectors.toSet()));
    final Set<String> fields = stream.getSchema().fields().stream().map(Field::name).collect(Collectors.toSet());
    assertThat(fields, equalTo(expected));
}
Also used : IntStream(java.util.stream.IntStream) Arrays(java.util.Arrays) SchemaKStream(io.confluent.ksql.structured.SchemaKStream) SchemaRegistryClient(io.confluent.kafka.schemaregistry.client.SchemaRegistryClient) SchemaKTable(io.confluent.ksql.structured.SchemaKTable) LogicalPlanBuilder(io.confluent.ksql.structured.LogicalPlanBuilder) CoreMatchers.equalTo(org.hamcrest.CoreMatchers.equalTo) EasyMock.mock(org.easymock.EasyMock.mock) HashMap(java.util.HashMap) KafkaTopicClient(io.confluent.ksql.util.KafkaTopicClient) Schema(org.apache.kafka.connect.data.Schema) TopologyDescription(org.apache.kafka.streams.TopologyDescription) Map(java.util.Map) MetaStore(io.confluent.ksql.metastore.MetaStore) TopicDescription(org.apache.kafka.clients.admin.TopicDescription) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) LinkedList(java.util.LinkedList) Before(org.junit.Before) Utils(org.apache.kafka.common.utils.Utils) TopicPartitionInfo(org.apache.kafka.common.TopicPartitionInfo) StreamsBuilder(org.apache.kafka.streams.StreamsBuilder) MockSchemaRegistryClient(io.confluent.kafka.schemaregistry.client.MockSchemaRegistryClient) SOURCE_NODE(io.confluent.ksql.planner.plan.PlanTestUtil.SOURCE_NODE) Field(org.apache.kafka.connect.data.Field) FunctionRegistry(io.confluent.ksql.function.FunctionRegistry) Set(java.util.Set) ConsumerConfig(org.apache.kafka.clients.consumer.ConsumerConfig) Test(org.junit.Test) EasyMock(org.easymock.EasyMock) KsqlConfig(io.confluent.ksql.util.KsqlConfig) MetaStoreFixture(io.confluent.ksql.util.MetaStoreFixture) Collectors(java.util.stream.Collectors) List(java.util.List) MAPVALUES_NODE(io.confluent.ksql.planner.plan.PlanTestUtil.MAPVALUES_NODE) KsqlException(io.confluent.ksql.util.KsqlException) Node(org.apache.kafka.common.Node) StructuredDataSource(io.confluent.ksql.metastore.StructuredDataSource) Assert(org.junit.Assert) Collections(java.util.Collections) Topology(org.apache.kafka.streams.Topology) PlanTestUtil.getNodeByName(io.confluent.ksql.planner.plan.PlanTestUtil.getNodeByName) MetaStore(io.confluent.ksql.metastore.MetaStore) StructuredDataSource(io.confluent.ksql.metastore.StructuredDataSource) Test(org.junit.Test)

Example 45 with Field

use of org.apache.kafka.connect.data.Field in project ksql by confluentinc.

the class KsqlStructuredDataOutputNodeTest method shouldPartitionByFieldNameInPartitionByProperty.

@Test
public void shouldPartitionByFieldNameInPartitionByProperty() {
    createOutputNode(Collections.singletonMap(DdlConfig.PARTITION_BY_PROPERTY, "field2"));
    final SchemaKStream schemaKStream = buildStream();
    final Field keyField = schemaKStream.getKeyField();
    assertThat(keyField, equalTo(new Field("field2", 1, Schema.STRING_SCHEMA)));
    assertThat(schemaKStream.getSchema().fields(), equalTo(schema.fields()));
}
Also used : Field(org.apache.kafka.connect.data.Field) SchemaKStream(io.confluent.ksql.structured.SchemaKStream) Test(org.junit.Test)

Aggregations

Field (org.apache.kafka.connect.data.Field)82 Struct (org.apache.kafka.connect.data.Struct)38 Schema (org.apache.kafka.connect.data.Schema)33 SchemaBuilder (org.apache.kafka.connect.data.SchemaBuilder)17 DataException (org.apache.kafka.connect.errors.DataException)14 List (java.util.List)12 ArrayList (java.util.ArrayList)11 Requirements.requireStruct (org.apache.kafka.connect.transforms.util.Requirements.requireStruct)11 HashMap (java.util.HashMap)10 Map (java.util.Map)8 Test (org.junit.Test)8 Date (java.util.Date)7 ConnectSchema (org.apache.kafka.connect.data.ConnectSchema)6 KsqlException (io.confluent.ksql.util.KsqlException)5 BigDecimal (java.math.BigDecimal)5 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)4 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)4 SchemaKStream (io.confluent.ksql.structured.SchemaKStream)4 ByteBuffer (java.nio.ByteBuffer)4 JsonNode (com.fasterxml.jackson.databind.JsonNode)3