blob: 30cabadb5638930daf177b7c37eb2929bcba881a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.avro;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
import org.apache.avro.Schema.Field;
/** Schemas used by other tests in this package. Therefore package protected. */
public class TestSchemas {
static final Schema NULL_SCHEMA = Schema.create(Schema.Type.NULL);
static final Schema BOOLEAN_SCHEMA = Schema.create(Schema.Type.BOOLEAN);
static final Schema INT_SCHEMA = Schema.create(Schema.Type.INT);
static final Schema LONG_SCHEMA = Schema.create(Schema.Type.LONG);
static final Schema FLOAT_SCHEMA = Schema.create(Schema.Type.FLOAT);
static final Schema DOUBLE_SCHEMA = Schema.create(Schema.Type.DOUBLE);
static final Schema STRING_SCHEMA = Schema.create(Schema.Type.STRING);
static final Schema BYTES_SCHEMA = Schema.create(Schema.Type.BYTES);
static final Schema INT_ARRAY_SCHEMA = Schema.createArray(INT_SCHEMA);
static final Schema LONG_ARRAY_SCHEMA = Schema.createArray(LONG_SCHEMA);
static final Schema STRING_ARRAY_SCHEMA = Schema.createArray(STRING_SCHEMA);
static final Schema INT_MAP_SCHEMA = Schema.createMap(INT_SCHEMA);
static final Schema LONG_MAP_SCHEMA = Schema.createMap(LONG_SCHEMA);
static final Schema STRING_MAP_SCHEMA = Schema.createMap(STRING_SCHEMA);
static final Schema ENUM1_AB_SCHEMA = Schema.createEnum("Enum1", null, null, list("A", "B"));
static final Schema ENUM1_ABC_SCHEMA = Schema.createEnum("Enum1", null, null, list("A", "B", "C"));
static final Schema ENUM1_BC_SCHEMA = Schema.createEnum("Enum1", null, null, list("B", "C"));
static final Schema ENUM2_AB_SCHEMA = Schema.createEnum("Enum2", null, null, list("A", "B"));
static final Schema ENUM_ABC_ENUM_DEFAULT_A_SCHEMA = Schema.createEnum("Enum", null, null, list("A", "B", "C"), "A");
static final Schema ENUM_AB_ENUM_DEFAULT_A_SCHEMA = Schema.createEnum("Enum", null, null, list("A", "B"), "A");
static final Schema ENUM_ABC_ENUM_DEFAULT_A_RECORD = Schema.createRecord("Record", null, null, false);
static final Schema ENUM_AB_ENUM_DEFAULT_A_RECORD = Schema.createRecord("Record", null, null, false);
static final Schema ENUM_ABC_FIELD_DEFAULT_B_ENUM_DEFAULT_A_RECORD = Schema.createRecord("Record", null, null, false);
static final Schema ENUM_AB_FIELD_DEFAULT_A_ENUM_DEFAULT_B_RECORD = Schema.createRecord("Record", null, null, false);
static {
ENUM_ABC_ENUM_DEFAULT_A_RECORD.setFields(
list(new Schema.Field("Field", Schema.createEnum("Schema", null, null, list("A", "B", "C"), "A"), null, null)));
ENUM_AB_ENUM_DEFAULT_A_RECORD.setFields(
list(new Schema.Field("Field", Schema.createEnum("Schema", null, null, list("A", "B"), "A"), null, null)));
ENUM_ABC_FIELD_DEFAULT_B_ENUM_DEFAULT_A_RECORD.setFields(
list(new Schema.Field("Field", Schema.createEnum("Schema", null, null, list("A", "B", "C"), "A"), null, "B")));
ENUM_AB_FIELD_DEFAULT_A_ENUM_DEFAULT_B_RECORD.setFields(
list(new Schema.Field("Field", Schema.createEnum("Schema", null, null, list("A", "B"), "B"), null, "A")));
}
static final Schema EMPTY_UNION_SCHEMA = Schema.createUnion(new ArrayList<>());
static final Schema NULL_UNION_SCHEMA = Schema.createUnion(list(NULL_SCHEMA));
static final Schema INT_UNION_SCHEMA = Schema.createUnion(list(INT_SCHEMA));
static final Schema LONG_UNION_SCHEMA = Schema.createUnion(list(LONG_SCHEMA));
static final Schema FLOAT_UNION_SCHEMA = Schema.createUnion(list(FLOAT_SCHEMA));
static final Schema DOUBLE_UNION_SCHEMA = Schema.createUnion(list(DOUBLE_SCHEMA));
static final Schema STRING_UNION_SCHEMA = Schema.createUnion(list(STRING_SCHEMA));
static final Schema BYTES_UNION_SCHEMA = Schema.createUnion(list(BYTES_SCHEMA));
static final Schema INT_STRING_UNION_SCHEMA = Schema.createUnion(list(INT_SCHEMA, STRING_SCHEMA));
static final Schema STRING_INT_UNION_SCHEMA = Schema.createUnion(list(STRING_SCHEMA, INT_SCHEMA));
static final Schema INT_FLOAT_UNION_SCHEMA = Schema.createUnion(list(INT_SCHEMA, FLOAT_SCHEMA));
static final Schema INT_LONG_UNION_SCHEMA = Schema.createUnion(list(INT_SCHEMA, LONG_SCHEMA));
static final Schema INT_LONG_FLOAT_DOUBLE_UNION_SCHEMA = Schema
.createUnion(list(INT_SCHEMA, LONG_SCHEMA, FLOAT_SCHEMA, DOUBLE_SCHEMA));
static final Schema NULL_INT_ARRAY_UNION_SCHEMA = Schema.createUnion(list(NULL_SCHEMA, INT_ARRAY_SCHEMA));
static final Schema NULL_INT_MAP_UNION_SCHEMA = Schema.createUnion(list(NULL_SCHEMA, INT_MAP_SCHEMA));
// Non recursive records:
static final Schema EMPTY_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema EMPTY_RECORD2 = Schema.createRecord("Record2", null, null, false);
static final Schema A_INT_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_LONG_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_INT_B_INT_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_RECORD1 = // DTYPE means TYPE with default value
Schema.createRecord("Record1", null, null, false);
static final Schema A_INT_B_DINT_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DINT_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DFIXED_4_BYTES_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DFIXED_8_BYTES_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DINT_STRING_UNION_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DINT_UNION_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DENUM_1_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema A_DINT_B_DENUM_2_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema FIXED_4_BYTES = Schema.createFixed("Fixed", null, null, 4);
static final Schema FIXED_8_BYTES = Schema.createFixed("Fixed", null, null, 8);
static final Schema NS_RECORD1 = Schema.createRecord("Record1", null, null, false);
static final Schema NS_RECORD2 = Schema.createRecord("Record1", null, null, false);
static final Schema NS_INNER_RECORD1 = Schema.createRecord("InnerRecord1", null, "ns1", false);
static final Schema NS_INNER_RECORD2 = Schema.createRecord("InnerRecord1", null, "ns2", false);
static {
EMPTY_RECORD1.setFields(Collections.emptyList());
EMPTY_RECORD2.setFields(Collections.emptyList());
A_INT_RECORD1.setFields(list(new Field("a", INT_SCHEMA, null, null)));
A_LONG_RECORD1.setFields(list(new Field("a", LONG_SCHEMA, null, null)));
A_INT_B_INT_RECORD1.setFields(list(new Field("a", INT_SCHEMA, null, null), new Field("b", INT_SCHEMA, null, null)));
A_DINT_RECORD1.setFields(list(new Field("a", INT_SCHEMA, null, 0)));
A_INT_B_DINT_RECORD1.setFields(list(new Field("a", INT_SCHEMA, null, null), new Field("b", INT_SCHEMA, null, 0)));
A_DINT_B_DINT_RECORD1.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", INT_SCHEMA, null, 0)));
A_DINT_B_DFIXED_4_BYTES_RECORD1
.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", FIXED_4_BYTES, null, null)));
A_DINT_B_DFIXED_8_BYTES_RECORD1
.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", FIXED_8_BYTES, null, null)));
A_DINT_B_DINT_STRING_UNION_RECORD1
.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", INT_STRING_UNION_SCHEMA, null, 0)));
A_DINT_B_DINT_UNION_RECORD1
.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", INT_UNION_SCHEMA, null, 0)));
A_DINT_B_DENUM_1_RECORD1
.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", ENUM1_AB_SCHEMA, null, null)));
A_DINT_B_DENUM_2_RECORD1
.setFields(list(new Field("a", INT_SCHEMA, null, 0), new Field("b", ENUM2_AB_SCHEMA, null, null)));
NS_INNER_RECORD1.setFields(list(new Schema.Field("a", INT_SCHEMA)));
NS_INNER_RECORD2.setFields(list(new Schema.Field("a", INT_SCHEMA)));
NS_RECORD1
.setFields(list(new Schema.Field("f1", Schema.createUnion(NULL_SCHEMA, Schema.createArray(NS_INNER_RECORD1)))));
NS_RECORD2
.setFields(list(new Schema.Field("f1", Schema.createUnion(NULL_SCHEMA, Schema.createArray(NS_INNER_RECORD2)))));
}
// Recursive records
static final Schema INT_LIST_RECORD = Schema.createRecord("List", null, null, false);
static final Schema LONG_LIST_RECORD = Schema.createRecord("List", null, null, false);
static {
INT_LIST_RECORD
.setFields(list(new Field("head", INT_SCHEMA, null, null), new Field("tail", INT_LIST_RECORD, null, null)));
LONG_LIST_RECORD
.setFields(list(new Field("head", LONG_SCHEMA, null, null), new Field("tail", LONG_LIST_RECORD, null, null)));
}
// -----------------------------------------------------------------------------------------------
/** Reader/writer schema pair. */
static final class ReaderWriter {
private final Schema mReader;
private final Schema mWriter;
public ReaderWriter(final Schema reader, final Schema writer) {
mReader = reader;
mWriter = writer;
}
public Schema getReader() {
return mReader;
}
public Schema getWriter() {
return mWriter;
}
}
/** Borrowed from the Guava library. */
static <E> ArrayList<E> list(E... elements) {
final ArrayList<E> list = new ArrayList<>();
Collections.addAll(list, elements);
return list;
}
static void assertSchemaContains(Schema schemaSubset, Schema original) {
String subset = schemaSubset.toString(false);
String whole = original.toString(false);
assertTrue(String.format("Subset '%s' not found in '%s'", subset, whole), whole.contains(subset));
}
}